ASP.Net/ADO.net Database/DetailsView

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Adding an AutoGenerateInsertButton attribute to the DetailsView

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" 
                      runat="server" 
                      DataSourceId="SqlDataSource1" 
                      AllowPaging="True"
                      BorderColor="#DEBA84" 
                      BorderStyle="None" 
                      BorderWidth="1px" 
                      BackColor="#DEBA84" 
                      CellSpacing="2" 
                      CellPadding="3" 
                      DataKeyNames="CustomerID" 
                      AutoGenerateSelectButton="True" 
                      AutoGenerateColumns="False" 
                      PageSize="5">
             <FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle>
             <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center"></PagerStyle>
             <HeaderStyle ForeColor="White" BackColor="#A55129" Font-Bold="True"></HeaderStyle>
             <Columns>
                 <asp:BoundField ReadOnly="True" 
                                 HeaderText="CustomerID"
                                 DataField="CustomerID" 
                                 SortExpression="CustomerID">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="CompanyName"
                                 DataField="CompanyName" 
                                 SortExpression="CompanyName">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="ContactName"
                                 DataField="ContactName" 
                                 SortExpression="ContactName">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="ContactTitle"
                                 DataField="ContactTitle" 
                                 SortExpression="ContactTitle">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="Address" 
                                 DataField="Address"
                                 SortExpression="Address"></asp:BoundField>
                 <asp:BoundField HeaderText="City" 
                                 DataField="City"
                                 SortExpression="City"></asp:BoundField>
                 <asp:BoundField HeaderText="Region" 
                                 DataField="Region"
                                 SortExpression="Region"></asp:BoundField>
                 <asp:BoundField HeaderText="PostalCode" 
                                 DataField="PostalCode"
                                 SortExpression="PostalCode"></asp:BoundField>
                 <asp:BoundField HeaderText="Country" 
                                 DataField="Country"
                                 SortExpression="Country"></asp:BoundField>
                 <asp:BoundField HeaderText="Phone" 
                                 DataField="Phone"
                                 SortExpression="Phone"></asp:BoundField>
                 <asp:BoundField HeaderText="Fax" 
                                 DataField="Fax"
                                 SortExpression="Fax"></asp:BoundField>
            </Columns>
            <SelectedRowStyle ForeColor="White" 
                              BackColor="#738A9C" 
                              Font-Bold="True"></SelectedRowStyle>
            <RowStyle ForeColor="#8C4510" BackColor="#FFF7E7"></RowStyle>
        </asp:GridView>
        <p><b>Customer Details:</b></p>
        <asp:DetailsView ID="DetailsView1" 
                         runat="server" 
                         DataSourceId="SqlDataSource2"
                         BorderColor="#DEBA84" 
                         BorderStyle="None" 
                         BorderWidth="1px"
                         BackColor="#DEBA84" 
                         CellSpacing="2" 
                         CellPadding="3" 
                         AutoGenerateRows="False" 
                         AutoGenerateInsertButton="true"
                         DataKeyNames="CustomerID">
             <FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle>
             <RowStyle ForeColor="#8C4510" BackColor="#FFF7E7"></RowStyle>
             <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center"></PagerStyle>
             <Fields>
                <asp:BoundField ReadOnly="True" HeaderText="CustomerID"
                      DataField="CustomerID" SortExpression="CustomerID">
                </asp:BoundField>
                <asp:BoundField HeaderText="CompanyName" DataField="CompanyName"
                     SortExpression="CompanyName"></asp:BoundField>
                <asp:BoundField HeaderText="ContactName" DataField="ContactName"
                     SortExpression="ContactName"></asp:BoundField>
                <asp:BoundField HeaderText="ContactTitle" DataField="ContactTitle"
                     SortExpression="ContactTitle"></asp:BoundField>
                <asp:BoundField HeaderText="Address" DataField="Address"
                     SortExpression="Address"></asp:BoundField>
                <asp:BoundField HeaderText="City" DataField="City"
                     SortExpression="City"></asp:BoundField>
                <asp:BoundField HeaderText="Region" DataField="Region"
                     SortExpression="Region"></asp:BoundField>
                <asp:BoundField HeaderText="PostalCode" DataField="PostalCode"
                     SortExpression="PostalCode"></asp:BoundField>
                <asp:BoundField HeaderText="Country" DataField="Country"
                     SortExpression="Country"></asp:BoundField>
                <asp:BoundField HeaderText="Phone" DataField="Phone"
                     SortExpression="Phone"></asp:BoundField>
                <asp:BoundField HeaderText="Fax" DataField="Fax"
                     SortExpression="Fax"></asp:BoundField>
            </Fields>
            <HeaderStyle ForeColor="White" BackColor="#A55129" 
                Font-Bold="True"></HeaderStyle>
            <EditRowStyle ForeColor="White" BackColor="#738A9C" 
                Font-Bold="True"></EditRowStyle>
        </asp:DetailsView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
             SelectCommand="SELECT * FROM [Customers]" 
             ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>" />
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
             SelectCommand="SELECT * FROM [Customers]"
             FilterExpression="CustomerID="{0}"" 
             ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">
             <FilterParameters>
                 <asp:ControlParameter Name="CustomerID" ControlId="GridView1"
                      PropertyName="SelectedValue"></asp:ControlParameter>
             </FilterParameters>
        </asp:SqlDataSource>    
    </div>
    </form>
</body>
</html>
File: Web.config
<configuration>
  <appSettings/>
  <connectionStrings>
        <add name="AppConnectionString1" 
             connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
             providerName="System.Data.SqlClient" />
    </connectionStrings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true">
      <codeSubDirectories>
        <add directoryName="VB"></add>
        <add directoryName="CS"></add>
      </codeSubDirectories>
    </compilation>
    <pages>
      <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
      </namespaces>
    </pages>
    <authentication mode="Windows"></authentication>
    <identity impersonate="true"/>
  </system.web>
</configuration>



Customizing the display of the DetailsView control

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DetailsView ID="DetailsView1" Runat="server" DataSourceID="SqlDataSource1"
             AutoGenerateRows="False" DataKeyNames="CustomerID">
             <Fields>
                  <asp:BoundField ReadOnly="True" HeaderText="CustomerID"
                       DataField="CustomerID" SortExpression="CustomerID"
                       Visible="False" />
                  <asp:BoundField ReadOnly="True" HeaderText="CompanyName"
                       DataField="CompanyName" SortExpression="CompanyName" />
                  <asp:BoundField HeaderText="ContactName" DataField="ContactName"
                       SortExpression="ContactName" />
                  <asp:BoundField HeaderText="ContactTitle" DataField="ContactTitle"
                       SortExpression="ContactTitle" />
              </Fields>
        </asp:DetailsView>
        <asp:SqlDataSource ID="SqlDataSource1" Runat="server" 
            SelectCommand="SELECT * FROM [Customers]"
            ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">
        </asp:SqlDataSource>    
    </div>
    </form>
</body>
</html>
File: Web.config
<configuration>
  <appSettings/>
  <connectionStrings>
        <add name="AppConnectionString1" 
             connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
             providerName="System.Data.SqlClient" />
    </connectionStrings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true">
      <codeSubDirectories>
        <add directoryName="VB"></add>
        <add directoryName="CS"></add>
      </codeSubDirectories>
    </compilation>
    <pages>
      <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
      </namespaces>
    </pages>
    <authentication mode="Windows"></authentication>
    <identity impersonate="true"/>
  </system.web>
</configuration>



Deleting Data with the DetailsView Control

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Delete</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DetailsView
        id="dtlProducts"
        AllowPaging="true"
        DataSourceID="srcProducts"
        DataKeyNames="Id"
        AutoGenerateInsertButton="true"
        AutoGenerateDeleteButton="true"
        AutoGenerateRows="false"
        Runat="server">
        <Fields>
        <asp:BoundField
            DataField="Id"
            HeaderText="ID:"
            InsertVisible="false" />
        <asp:BoundField
            DataField="Title"
            HeaderText="Title:" />
        <asp:BoundField
            DataField="Director"
            HeaderText="Director:" />
        <asp:CheckBoxField
            DataField="InStocks"
            HeaderText="In Stocks:" />
        </Fields>
    </asp:DetailsView>
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Id,Title,Director,InStocks FROM Products"
        InsertCommand="INSERT Products (Title,Director,InStocks) VALUES (@Title,@Director,
        DeleteCommand="DELETE Products WHERE id=@Id"
        Runat="server" />
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Displaying a Master/Detail form with the DetailsView control.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    void Page_Load()
    {
        if (!Page.IsPostBack)
            grdProducts.SelectedIndex = 0;
    }
    protected void dtlProducts_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {
        grdProducts.DataBind();
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <form id="form1" runat="server">
    <div class="content">
    <div class="column">
    <asp:GridView
        id="grdProducts"
        DataSourceID="srcProducts"
        DataKeyNames="Id"
        AutoGenerateSelectButton="true"
        Runat="server" />
    </div>
    <div class="column">
    <asp:DetailsView
        id="dtlProducts"
        DefaultMode="Edit"
        AutoGenerateEditButton="true"
        AllowPaging="true"
        DataSourceID="srcProductDetails"
        DataKeyNames="Id"
        Runat="server" OnItemUpdated="dtlProducts_ItemUpdated" />
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Id,Title FROM Products"
        Runat="server" />
    </div>
    <asp:SqlDataSource
        id="srcProductDetails"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Id,Title,Director,InStocks FROM Products WHERE Id=@ProductId"
        UpdateCommand="UPDATE Products SET Title=@Title,Director=@Director, InStocks=@InStocks WHERE Id=@Id"
        Runat="server">
        <SelectParameters>
            <asp:ControlParameter Name="ProductId" ControlID="grdProducts" />
        </SelectParameters>
    </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Editing a record with the DetailsView control.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Update</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DetailsView
        id="dtlProducts"
        DataKeyNames="Id"
        AutoGenerateEditButton="true"
        AllowPaging="true"
        DataSourceID="srcProducts"
        Runat="server" />
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Id,Title,Director,InStocks FROM Products"
        UpdateCommand="UPDATE Products SET Title=@Title,Director=@Director,InStocks=@InStocks WHERE Id=@Id"
        Runat="server" />
    </div>
    </form>
</body>
</html>
File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Enabling paging on the DetailsView control

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DetailsView ID="DetailsView1" Runat="server" DataSourceID="SqlDataSource1"
         AutoGenerateRows="True" AllowPaging=True DataKeyNames="CustomerID"></asp:DetailsView>
    <asp:SqlDataSource ID="SqlDataSource1" Runat="server" 
        SelectCommand="SELECT * FROM [Customers]"
        ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">
    </asp:SqlDataSource>
    
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <appSettings/>
  <connectionStrings>
        <add name="AppConnectionString1" 
             connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
             providerName="System.Data.SqlClient" />
    </connectionStrings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true">
      <codeSubDirectories>
        <add directoryName="VB"></add>
        <add directoryName="CS"></add>
      </codeSubDirectories>
    </compilation>
    <pages>
      <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
      </namespaces>
    </pages>
    <authentication mode="Windows"></authentication>
    <identity impersonate="true"/>
  </system.web>
</configuration>



Handling Concurrency Issues: CompareAllValues or OverwriteChanges

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    protected void srcProducts_Updated(object sender, SqlDataSourceStatusEventArgs e)
    {
        if (e.AffectedRows == 0)
            lblMessage.Text = "Could not update record";
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Concurrency</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label ID="lblMessage" EnableViewState="false" runat="server" />
    <asp:DetailsView
        id="dtlProducts"
        DataKeyNames="Id"
        AutoGenerateEditButton="true"
        AllowPaging="true"
        DataSourceID="srcProducts"
        Runat="server" />
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Id,Title,Director,InStocks FROM Products"
        UpdateCommand="UPDATE Products
            SET Title=@Title,Director=@Director,InStocks=
            WHERE Title=@original_Title
            AND Director=@original_Director
            AND InStocks=@InStocks
            AND Id=@original_Id"
        ConflictDetection="CompareAllValues"
        OldValuesParameterFormatString="original_{0}"
        Runat="server" OnUpdated="srcProducts_Updated" />
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Inserting Data with the DetailsView Control

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Insert</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DetailsView
        id="dtlProducts"
        AllowPaging="true"
        DataSourceID="srcProducts"
        AutoGenerateInsertButton="true"
        Runat="server" />
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Title,Director,InStocks FROM Products"
        InsertCommand="INSERT Products (Title,Director,InStocks)
            VALUES (@Title,@Director,
        Runat="server" />
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Link DetailsView with SqlDataSource and do the editing

<%@ Page Language="C#"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:SqlDataSource ID="sourceProducts" 
                           runat="server"
                           ProviderName="System.Data.SqlClient"
                           ConnectionString="<%$ ConnectionStrings:Northwind %>"
                           SelectCommand="SELECT ProductID, ProductName, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued FROM Products"
                           UpdateCommand="UPDATE Products SET ProductName=@ProductName, UnitPrice=CONVERT(money, @UnitPrice), UnitsInStock=@UnitsInStock, UnitsOnOrder=@UnitsOnOrder, ReorderLevel=@ReorderLevel, Discontinued=@Discontinued WHERE ProductID=@ProductID"
                           DeleteCommand="DELETE Products WHERE ProductID=@ProductID"
                           InsertCommand="INSERT INTO Products (ProductName, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued) VALUES (@ProductName, CONVERT(money, @UnitPrice), @UnitsInStock, @UnitsOnOrder, @ReorderLevel, @Discontinued)">  
        </asp:SqlDataSource>
        <asp:DetailsView ID="DetailsView1" 
                         runat="server" 
                         Height="50px" 
                         Width="125px"  
                         DataKeyNames="ProductID"
                         AllowPaging="True" 
                         DataSourceID="sourceProducts"
                         AutoGenerateInsertButton="true" 
                         AutoGenerateDeleteButton="true" 
                         AutoGenerateEditButton="true">
            <PagerSettings PageButtonCount="25" />            
        </asp:DetailsView>
        <br />
    </div>
    </form>
</body>
</html>

File: Web.config

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="Northwind" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI"/>
  </connectionStrings>
</configuration>



Use the ItemInserted event to handle any errors

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    protected void dtlProducts_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        if (e.Exception != null)
        {
            e.ExceptionHandled = true;
            e.KeepInInsertMode = true;
            lblError.Visible = true;
        }
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Insert Errors</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label
        id="lblError"
        Text="Could not insert record"
        Visible="false"
        EnableViewState="false"
        CssClass="error"
        Runat="server" />
    <asp:DetailsView
        id="dtlProducts"
        AllowPaging="true"
        DataSourceID="srcProducts"
        AutoGenerateInsertButton="true"
        OnItemInserted="dtlProducts_ItemInserted"
        Runat="server" />
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Title,Director,InStocks FROM Products"
        InsertCommand="INSERT Products (Title,Director,InStocks)VALUES (@Title,@Director,
        Runat="server" />
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Using a PagerTemplate to customize the paging interface.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    protected void dtlProducts_DataBound(object sender, EventArgs e)
    {
        DropDownList ddlPager = (DropDownList)dtlProducts.BottomPagerRow.Cells[0]. FindControl("ddlPager");        for (int i = 0; i < dtlProducts.PageCount; i++)
        {
            ListItem item = new ListItem( String.Format("Record {0}",i+1), i.ToString());
            if (dtlProducts.PageIndex == i)
                item.Selected = true;
            ddlPager.Items.Add(item);
        }
    }
    protected void btnPage_Click(object sender, EventArgs e)
    {
        DropDownList ddlPager = (DropDownList)dtlProducts.BottomPagerRow.Cells[0]. FindControl("ddlPager");
        dtlProducts.PageIndex = Int32.Parse(ddlPager.SelectedValue);
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Pager Template</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DetailsView
            id="dtlProducts"
            DataSourceID="srcProducts"
            AllowPaging="true"
            OnDataBound="dtlProducts_DataBound"
            Runat="server">
            <PagerTemplate>
                <asp:DropDownList
                    id="ddlPager"
                    Runat="server" />
                <asp:Button
                    id="btnPage"
                    Text="Select"
                    Runat="server" OnClick="btnPage_Click" />
            </PagerTemplate>
        </asp:DetailsView>
    
        <asp:SqlDataSource
            id="srcProducts"
            ConnectionString="<%$ ConnectionStrings:Products %>"
            SelectCommand="SELECT Id,Title,Director,InStocks FROM Products"
            Runat="server" />
    </div>
    </form>
</body>
</html>
File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Using a template when editing with the DetailsView control.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Template Edit</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DetailsView
        id="dtlProducts"
        AutoGenerateRows="false"
        AutoGenerateEditButton="true"
        AllowPaging="true"
        DefaultMode="Edit"
        DataSourceID="srcProducts"
        DataKeyNames="Id"
        Runat="server">
        <Fields>
    <asp:TemplateField HeaderText="Title:">
    <EditItemTemplate>
    <asp:TextBox
        id="txtTitle"
        Text="<%# Bind("Title") %>"
        runat="server" />
    <asp:RequiredFieldValidator
        id="reqTitle"
        ControlToValidate="txtTitle"
        Text="(required)"
        Display="Dynamic"
        Runat="server" />
    </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Box Office Totals:">
    <EditItemTemplate>
    <asp:TextBox
        id="txtTotals"
        Text="<%# Bind("Totals", "{0:f}") %>"
        runat="server" />
    <asp:RequiredFieldValidator
        id="reqTotals"
        ControlToValidate="txtTotals"
        Text="(required)"
        Display="Dynamic"
        Runat="server" />
    <asp:CompareValidator
        id="cmpTotals"
        ControlToValidate="txtTotals"
        Text="(invalid)"
        Display="Dynamic"
        Operator="DataTypeCheck"
        Type="currency"
        Runat="server" />
    </EditItemTemplate>
    </asp:TemplateField>
    </Fields>
</asp:DetailsView>
<asp:SqlDataSource
    id="srcProducts"
    ConnectionString="<%$ ConnectionStrings:Products %>"
    SelectCommand="SELECT Id,Title,Totals FROM Products"
    UpdateCommand="UPDATE Products SET Title=@Title, Totals=@Totals WHERE Id=@Id"
    Runat="server" />
    </div>
    </form>
</body>
</html>

File: Web.config
<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>



Using the GridView and DetailsView together

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" 
                      runat="server" 
                      DataSourceId="SqlDataSource1" 
                      AllowPaging="True"
                      BorderColor="#DEBA84" 
                      BorderStyle="None" 
                      BorderWidth="1px" 
                      BackColor="#DEBA84" 
                      CellSpacing="2" 
                      CellPadding="3" 
                      DataKeyNames="CustomerID" 
                      AutoGenerateSelectButton="True" 
                      AutoGenerateColumns="False" 
                      PageSize="5">
             <FooterStyle ForeColor="#8C4510"
                          BackColor="#F7DFB5"></FooterStyle>
             <PagerStyle ForeColor="#8C4510" 
                         HorizontalAlign="Center"></PagerStyle>
             <HeaderStyle ForeColor="White" 
                          BackColor="#A55129" 
                          Font-Bold="True"></HeaderStyle>
             <Columns>
                 <asp:BoundField ReadOnly="True" 
                                 HeaderText="CustomerID"
                                 DataField="CustomerID" 
                                 SortExpression="CustomerID">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="CompanyName"
                                 DataField="CompanyName" 
                                 SortExpression="CompanyName">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="ContactName"
                      DataField="ContactName" SortExpression="ContactName">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="ContactTitle"
                      DataField="ContactTitle" SortExpression="ContactTitle">
                 </asp:BoundField>
                 <asp:BoundField HeaderText="Address" DataField="Address"
                      SortExpression="Address"></asp:BoundField>
                 <asp:BoundField HeaderText="City" DataField="City"
                      SortExpression="City"></asp:BoundField>
                 <asp:BoundField HeaderText="Region" DataField="Region"
                      SortExpression="Region"></asp:BoundField>
                 <asp:BoundField HeaderText="PostalCode" DataField="PostalCode"
                      SortExpression="PostalCode"></asp:BoundField>
                 <asp:BoundField HeaderText="Country" DataField="Country"
                      SortExpression="Country"></asp:BoundField>
                 <asp:BoundField HeaderText="Phone" DataField="Phone"
                      SortExpression="Phone"></asp:BoundField>
                 <asp:BoundField HeaderText="Fax" DataField="Fax"
                      SortExpression="Fax"></asp:BoundField>
            </Columns>
            <SelectedRowStyle ForeColor="White" 
                              BackColor="#738A9C" 
                              Font-Bold="True"></SelectedRowStyle>
            <RowStyle ForeColor="#8C4510" BackColor="#FFF7E7"></RowStyle>
        </asp:GridView>
        <p><b>Customer Details:</b></p>
        <asp:DetailsView ID="DetailsView1" 
                         runat="server" 
                         DataSourceId="SqlDataSource2"
                         BorderColor="#DEBA84" 
                         BorderStyle="None" 
                         BorderWidth="1px"
                         BackColor="#DEBA84" 
                         CellSpacing="2" 
                         CellPadding="3" 
                         AutoGenerateRows="False" 
                         DataKeyNames="CustomerID">
             <FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle>
             <RowStyle ForeColor="#8C4510" BackColor="#FFF7E7"></RowStyle>
             <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center"></PagerStyle>
             <Fields>
                <asp:BoundField ReadOnly="True" HeaderText="CustomerID"
                      DataField="CustomerID" SortExpression="CustomerID">
                </asp:BoundField>
                <asp:BoundField HeaderText="CompanyName" DataField="CompanyName"
                     SortExpression="CompanyName"></asp:BoundField>
                <asp:BoundField HeaderText="ContactName" DataField="ContactName"
                     SortExpression="ContactName"></asp:BoundField>
                <asp:BoundField HeaderText="ContactTitle" DataField="ContactTitle"
                     SortExpression="ContactTitle"></asp:BoundField>
                <asp:BoundField HeaderText="Address" DataField="Address"
                     SortExpression="Address"></asp:BoundField>
                <asp:BoundField HeaderText="City" DataField="City"
                     SortExpression="City"></asp:BoundField>
                <asp:BoundField HeaderText="Region" DataField="Region"
                     SortExpression="Region"></asp:BoundField>
                <asp:BoundField HeaderText="PostalCode" DataField="PostalCode"
                     SortExpression="PostalCode"></asp:BoundField>
                <asp:BoundField HeaderText="Country" DataField="Country"
                     SortExpression="Country"></asp:BoundField>
                <asp:BoundField HeaderText="Phone" DataField="Phone"
                     SortExpression="Phone"></asp:BoundField>
                <asp:BoundField HeaderText="Fax" DataField="Fax"
                     SortExpression="Fax"></asp:BoundField>
            </Fields>
            <HeaderStyle ForeColor="White" BackColor="#A55129" 
                Font-Bold="True"></HeaderStyle>
            <EditRowStyle ForeColor="White" BackColor="#738A9C" 
                Font-Bold="True"></EditRowStyle>
        </asp:DetailsView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
             SelectCommand="SELECT * FROM [Customers]" 
             ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>" />
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
             SelectCommand="SELECT * FROM [Customers]"
             FilterExpression="CustomerID="{0}"" 
             ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">
             <FilterParameters>
                 <asp:ControlParameter Name="CustomerID" ControlId="GridView1"
                      PropertyName="SelectedValue"></asp:ControlParameter>
             </FilterParameters>
        </asp:SqlDataSource>
    
    </div>
    </form>
</body>
</html>
File: Web.config
<configuration>
  <appSettings/>
  <connectionStrings>
        <add name="AppConnectionString1" 
             connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
             providerName="System.Data.SqlClient" />
    </connectionStrings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true">
      <codeSubDirectories>
        <add directoryName="VB"></add>
        <add directoryName="CS"></add>
      </codeSubDirectories>
    </compilation>
    <pages>
      <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
      </namespaces>
    </pages>
    <authentication mode="Windows"></authentication>
    <identity impersonate="true"/>
  </system.web>
</configuration>