956
人物
asp.net 2.0中一次性更新所有GRIDVIEW的記錄
在asp.net2.0中,gridview控件是十分不錯的控件。有的時候,可能一個GRIDVIEW控件中的各行都是文本框,如何一次性更新所有修改過的記錄呢?有兩種方法,一種是使用sqldatasource來更新所有記錄,但這個方法比較慢,因為每更新一條記錄都要建立數據連接並執行updatecommand,會影響性能,但還是先來看下實現方法:
<%@PageLanguage="C#"%> <scriptrunat="server"> voidButton1_Click(objectsender,EventArgse) { for(inti=0;i<GridView1.Rows.Count;i++) { GridViewRowrow=GridView1.Rows[i]; SqlDataSource1.UpdateParameters[0].DefaultValue=((TextBox)row.Cells[0].FindControl("TextBox2")).Text; SqlDataSource1.UpdateParameters[1].DefaultValue=((TextBox)row.Cells[1].FindControl("TextBox3")).Text; SqlDataSource1.UpdateParameters[2].DefaultValue=GridView1.DataKeys[i].Value.ToString(); SqlDataSource1.Update(); } } </script> <htmlxmlns=" <headrunat="server"> <title>UntitledPage</title> </head> <body> <formrunat="server"> <div> <asp:GridViewID="GridView1"Runat="server"DataSourceID="SqlDataSource1"DataKeyNames="CustomerID" AutoGenerateColumns="False"> <Columns> <asp:TemplateFieldSortExpression="CustomerID"HeaderText="CustomerID"> <ItemTemplate> <asp:TextBoxRunat="server"Text='<%#Bind("CustomerID")%>'ID="TextBox1"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateFieldSortExpression="CompanyName"HeaderText="CompanyName"> <ItemTemplate> <asp:TextBoxRunat="server"Text='<%#Bind("CompanyName")%>'ID="TextBox2"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateFieldSortExpression="ContactName"HeaderText="ContactTitle"> <ItemTemplate> <asp:TextBoxRunat="server"Text='<%#Bind("ContactTitle")%>'ID="TextBox3"></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSourceID="SqlDataSource1"Runat="server" SelectCommand="SELECT[CustomerID],[CompanyName],[ContactName],[ContactTitle]FROM[Customers]" UpdateCommand="UPDATE[Customers]SET[CompanyName]=@CompanyName,[ContactTitle]=@ContactTitleWHERE[CustomerID]=@CustomerID" ConnectionString="<%$ConnectionStrings:AppConnectionString1%>"> <UpdateParameters> <asp:ParameterType="String"Name="CompanyName"></asp:Parameter> <asp:ParameterType="String"Name="ContactTitle"></asp:Parameter> <asp:ParameterType="String"Name="CustomerID"></asp:Parameter> </UpdateParameters> </asp:SqlDataSource> <asp:ButtonID="Button1"Runat="server"Text="Button"OnClick="Button1_Click"/> </div> </form> </body> </html> |
另外一個方法是用組合SQL語句來進行的,速度比較快,原理也容易明白
<%@PageLanguage="C#"%> <%@ImportNamespace="System.Text"%> <%@ImportNamespace="System.Data.SqlClient"%> <scriptrunat="server"> voidButton1_Click(objectsender,EventArgse) { StringBuilderquery=newStringBuilder(); for(inti=0;i<GridView1.Rows.Count;i++) { GridViewRowrow=GridView1.Rows[i]; stringvalue1=((TextBox)row.Cells[0].FindControl("TextBox2")).Text.Replace("'","''"); stringvalue2=((TextBox)row.Cells[1].FindControl("TextBox3")).Text.Replace("'","''"); stringvalue3=GridView1.DataKeys[i].Value.ToString(); query.Append("UPDATE[Customers]SET[CompanyName]='") .Append(value1).Append("',[ContactTitle]='") .Append(value2).Append("'WHERE[CustomerID]='") .Append(value3).Append("';/n"); } SqlConnectioncon=newSqlConnection(ConfigurationSettings.ConnectionStrings["AppConnectionString1"].ConnectionString); SqlCommandcommand=newSqlCommand(query.ToString(),con); con.Open(); command.ExecuteNonQuery(); con.Close(); } voidPage_Load(objectsender,EventArgse) { if(!Page.IsPostBack) { SqlConnectioncon=newSqlConnection(ConfigurationSettings.ConnectionStrings["AppConnectionString1"].ConnectionString); SqlCommandcommand=newSqlCommand("SELECT[CustomerID],[CompanyName],[ContactName],[ContactTitle]FROM[Customers]",con); con.Open(); GridView1.DataSource=command.ExecuteReader(); GridView1.DataBind(); con.Close(); } } </script> <htmlxmlns="https://www.w3.org/1999/xhtml"> <headrunat="server"> <title>UntitledPage</title> </head> <body> <formrunat="server"> <div> <asp:GridViewID="GridView1"Runat="server"DataKeyNames="CustomerID" AutoGenerateColumns="False"> <Columns> <asp:TemplateFieldSortExpression="CustomerID"HeaderText="CustomerID"> <ItemTemplate> <asp:TextBoxRunat="server"Text='<%#Bind("CustomerID")%>'ID="TextBox1"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateFieldSortExpression="CompanyName"HeaderText="CompanyName"> <ItemTemplate> <asp:TextBoxRunat="server"Text='<%#Bind("CompanyName")%>'ID="TextBox2"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateFieldSortExpression="ContactName"HeaderText="ContactTitle"> <ItemTemplate> <asp:TextBoxRunat="server"Text='<%#Bind("ContactTitle")%>'ID="TextBox3"></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:ButtonID="Button1"Runat="server"Text="Button"OnClick="Button1_Click"/> </div> </form> </body> </html> |
最後更新:2017-04-02 00:06:36