读书人

关于asp.net中的DataGrid数据批量更新

发布时间: 2012-01-22 22:38:43 作者: rapoo

关于asp.net中的DataGrid数据批量更新
在asp.net中,我用DataSet获取。在DataGrid中绑—ataSet.Tables[ "*** "].DefaultView,现在我在DataGrid修改了一些数据,我要怎么样才能批量更新数据呢,是把DataGrid中的行都取出来然后用update来更新吗?
在线等答案,也可以QQ:261766987

[解决办法]
参考:

/// <summary>
/// WebForm2 的摘要说明。
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
private string strcon = "server=localhost;database=pubs;uid=sa;pwd=wang ";
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
System.Data.SqlClient.SqlConnection con=new System.Data.SqlClient.SqlConnection(strcon);
string sql= "select top 5 * from authors order by au_id desc ";
System.Data.SqlClient.SqlCommand cmd=new System.Data.SqlClient.SqlCommand(sql,con);
con.Open();
DataGrid1.DataSource = cmd.ExecuteReader();
DataGrid1.DataBind();
con.Close();
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.Item.ItemType == ListItemType.Footer)
{
if(e.CommandName== "edit ")
{
for(int i=0;i < DataGrid1.Items.Count;i++)
{

TextBox t1=new TextBox();
t1=(TextBox)DataGrid1.Items[i].FindControl( "TextBox1 ");

TextBox t2=new TextBox();
t2=(TextBox)DataGrid1.Items[i].FindControl( "TextBox2 ");
string id=DataGrid1.Items[i].Cells[0].Text;
string sql= "update authors set au_fname= ' "+t1.Text+ " ',au_lname= ' "+t2.Text+ " ' where au_id= ' "+id+ " ' ";
if(Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteNonQuery(strcon,CommandType.Text,sql)!=1)
{
Response.Write( "更新失败! ");
return;
}

//Response.Write( " <Li> ID: "+DataGrid1.Items[i].Cells[0].Text);
//Response.Write( "更新内容1: " + t1.Text);
//Response.Write( "更新内容2: " + t2.Text);

}

BindGrid();
}
}
}

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//if(e.Item.ItemType == ListItemType.Footer)
//{
//Button b1=(Button)e.Item.FindControl( "Button1 ");
//b1.Attributes.Add( "onclick ", "return confirm( '您真的要全部更新吗? '); ");
//}

if(e.Item.ItemType== ListItemType.Item || e.Item.ItemType== ListItemType.AlternatingItem)
{
TextBox t1,t2;
t1=(TextBox)e.Item.FindControl( "TextBox1 ");
t1.Attributes.Add( "onfocus ", "this.className= 'edit ' ");


t1.Attributes.Add( "onblur ", "this.className= 'noedit ' ");

t2=(TextBox)e.Item.FindControl( "TextBox2 ");
t2.Attributes.Add( "onfocus ", "this.className= 'edit ' ");
t2.Attributes.Add( "onblur ", "this.className= 'noedit ' ");

}
}


}
HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN " >
<HTML>
<HEAD>
<title> WebForm2 </title>
<meta content= "Microsoft Visual Studio .NET 7.1 " name= "GENERATOR ">
<meta content= "C# " name= "CODE_LANGUAGE ">
<meta content= "JavaScript " name= "vs_defaultClientScript ">
<meta content= "http://schemas.microsoft.com/intellisense/ie5 " name= "vs_targetSchema ">
<LINK href= "1.css " type= "text/css " rel= "stylesheet ">
</HEAD>
<body>
<form id= "Form1 " method= "post " runat= "server ">
<asp:datagrid id= "DataGrid1 " runat= "server " CellPadding= "3 " BackColor= "White " BorderWidth= "1px "
BorderStyle= "None " BorderColor= "#CCCCCC " AutoGenerateColumns= "False " ShowFooter= "True " ShowHeader= "False ">
<FooterStyle ForeColor= "#000066 " BackColor= "White "> </FooterStyle>
<SelectedItemStyle Font-Bold= "True " ForeColor= "White " BackColor= "#669999 "> </SelectedItemStyle>
<ItemStyle ForeColor= "#000066 "> </ItemStyle>
<HeaderStyle Font-Bold= "True " ForeColor= "White " BackColor= "#006699 "> </HeaderStyle>
<Columns>
<asp:BoundColumn DataField= "au_id " HeaderText= "ID "> </asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox id=TextBox1 runat= "server " Text= ' <%#DataBinder.Eval(Container.DataItem, "au_fname ")%> ' CssClass= "noedit ">
</asp:TextBox>
<asp:RequiredFieldValidator id= "RequiredFieldValidator1 " runat= "server " ErrorMessage= "*! " ControlToValidate= "TextBox1 "
EnableViewState= "False "> </asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox id=TextBox2 runat= "server " Text= ' <%#DataBinder.Eval(Container.DataItem, "au_lname ")%> ' CssClass= "noedit ">
</asp:TextBox>
<asp:RequiredFieldValidator id= "RequiredFieldValidator2 " runat= "server " ErrorMessage= "*! " ControlToValidate= "TextBox2 "
EnableViewState= "False "> </asp:RequiredFieldValidator>
</ItemTemplate>
<FooterTemplate>
<DIV align= "right ">
<asp:Button id= "Button1 " runat= "server " Text= "更新 " CommandName= "edit "> </asp:Button> <INPUT type= "reset " value= "还原 ">   </DIV>
</FooterTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign= "Left " ForeColor= "#000066 " BackColor= "White " Mode= "NumericPages "> </PagerStyle>


</asp:datagrid>
</form>
</body>
</HTML>

[解决办法]
mark
[解决办法]
顶下
[解决办法]
顶。
[解决办法]

[解决办法]
应该可以把数据放在dataadapter中,然后使用sqladapter的update方法更新
不过没用过,感觉不实用,一直都是遍历整个datagrid来更新
[解决办法]
应该有更好的方法,这也太复杂点了吧!
[解决办法]
我想早恋,可已经晚了
[解决办法]
if you retrive your data from database and store it in dataset

---- get the selectedID, note that the following code only change the data
in your dataset rather than database
form each row in dataset.table( "table ").rows
if row.item( "id ") = selectedID
row.delete
end if
next

--------- when you click the "submit " botton

dim rowafftected as integer

rowaffected = dataadapter.update(dataset ', "yourTable ")

读书人网 >asp.net

热点推荐