ASP.Net/ADO.net Database/DetailsView — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 14:51, 26 мая 2010
Содержание
- 1 Adding an AutoGenerateInsertButton attribute to the DetailsView
- 2 Customizing the display of the DetailsView control
- 3 Deleting Data with the DetailsView Control
- 4 Displaying a Master/Detail form with the DetailsView control.
- 5 Editing a record with the DetailsView control.
- 6 Enabling paging on the DetailsView control
- 7 Handling Concurrency Issues: CompareAllValues or OverwriteChanges
- 8 Inserting Data with the DetailsView Control
- 9 Link DetailsView with SqlDataSource and do the editing
- 10 Use the ItemInserted event to handle any errors
- 11 Using a PagerTemplate to customize the paging interface.
- 12 Using a template when editing with the DetailsView control.
- 13 Using the GridView and DetailsView together
Adding an AutoGenerateInsertButton attribute to the DetailsView
<source lang="csharp">
<!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">
<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>
Customer Details:
<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>
</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>
</source>
Customizing the display of the DetailsView control
<source lang="csharp">
<!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">
<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>
</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>
</source>
Deleting Data with the DetailsView Control
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Displaying a Master/Detail form with the DetailsView control.
<source lang="csharp">
<%@ 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">
<asp:GridView id="grdProducts" DataSourceID="srcProducts" DataKeyNames="Id" AutoGenerateSelectButton="true" Runat="server" />
<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" />
<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>
</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>
</source>
Editing a record with the DetailsView control.
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Enabling paging on the DetailsView control
<source lang="csharp">
<!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">
<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>
</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>
</source>
Handling Concurrency Issues: CompareAllValues or OverwriteChanges
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Inserting Data with the DetailsView Control
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Link DetailsView with SqlDataSource and do the editing
<source lang="csharp">
<%@ 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">
<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>
</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>
</source>
Use the ItemInserted event to handle any errors
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Using a PagerTemplate to customize the paging interface.
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Using a template when editing with the DetailsView control.
<source lang="csharp">
<%@ 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">
<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" />
</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>
</source>
Using the GridView and DetailsView together
<source lang="csharp">
<!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">
<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>
Customer Details:
<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>
</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>
</source>