如何将GridView中的数据保存到SQLServer2005?如何在网格视图中编辑和删除行
本文关键字:网格 视图 编辑 删除行 GridView 数据 保存 SQLServer2005 | 更新日期: 2023-09-27 18:00:17
我有一个GridView,其中包含单击按钮时从两个TextBox中提取的数据。我希望在Gridview中实现以下功能:1) 我希望能够编辑此GridView中的数据。2) 我还应该能够从GridView中删除行。3) 最后,当我单击另一个Submit按钮时,Gridview中的所有行都应该保存在数据库中。
它是一个基于web的ASP.NET应用程序,使用C#(Visual Studio 2010)进行编码,并使用SQL Server 2005。如何更改以下代码以实现上述指定功能?
public partial class _Default : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constring"]);
SqlCommand cmd = new SqlCommand();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
dt = Session["data_table"] as DataTable;
}
}
protected void btnTextDisplay_Click(object sender, EventArgs e)
{
if (dt == null)
{
dt = new DataTable();
DataColumn dc1 = new DataColumn("Name");
DataColumn dc2 = new DataColumn("City");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
Session["data_table"] = dt;
}
DataRow dr = dt.NewRow();
dr[0] = txtName.Text;
dr[1] = txtCity.Text;
dt.Rows.Add(dr);
gvDisplay.DataSource = dt;
gvDisplay.DataBind();
}
protected void btnDisplay_Click(object sender, EventArgs e)
{
ds.Clear();
da = new SqlDataAdapter("insert into PRACT values(@name, @city)", con);
con.Open();
da.Fill(ds);
gv.DataSource = ds;
gv.DataBind();
con.Close();
}
}
在你的aspx页面上,我建议你这样做:
<asp:GridView runat="server" id="gvDisplay" OnRowCommand="grid_OnRowCommand">
<Columns>
<TemplateField>
<ItemTemplate>
<asp:TextBox runat="server" id="txtNameGrid" Text='<%#DataBinder.Eval(Container.DataItem, "Name")%>'/>
</ItemTemplate>
</TemplateField>
<TemplateField>
<ItemTemplate>
<asp:TextBox runat="server" id="txtCityGrid" Text='<%#DataBinder.Eval(Container.DataItem, "City")%>'/>
</ItemTemplate>
</TemplateField>
<TemplateField>
<ItemTemplate>
<asp:Button runat="server" id="btnDeleteGrid" Text = "Delete" CommandArgument='<%#Eval(Container.DataItem, "YourIDColumn")%>' CommandName="DeleteRow"/>
</ItemTemplate>
</TemplateField>
</Columns>
</asp:GridView>
我建议您在DataTable中创建一个新列,该列将是每个寄存器的ID。
好吧,你在页面上向这个DataTable添加了寄存器,所以你需要创建一个int类型的会话,每次调用事件btnTextDisplay_Click时,你都必须增加这个int会话,并将其值设置为DataTable的列ID。
网格的属性OnRowCommand是当您单击按钮btnDelteGrid时将调用的事件。此事件的代码如下:
protected void grid_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
if(e.CommandName == "DeleteRow")
{
foreach(DataRow row in dt.Rows)
{
if(Convert.ToInt32(row["YourColumnID"]) == Convert.ToInt32(e.CommandArgument))
row.Delete();
}
dt.AcceptChanges();
gvDisplay.DataSource = dt;
gvDisplay.DataBind();
}
}
保存寄存器的事件应该是这样的。
protected void btnSave_Click(object sender, EventArgs e)
{
foreach(DataRow row in dt.Rows)
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constring"]);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "INSERT INTO YOUR_TABLE_NAME (NAME, CITY) VALUES (" + row["Name"].ToString() + "," + row["City"].ToString() + ")";
int numRegs = cmd.ExecuteNonQuery();
}
}
我真的希望我能帮上忙。我不能测试我的代码,而且我不太擅长使用DataTables,所以如果我的代码有任何问题,请告诉我。
我认为如果你使用批量插件来实现插件,会更有效率。搜索如何制作它,它很酷,也很快。
还可以尝试使用存储过程,因为它比直接使用命令文本更安全。使用它们将阻止SQL注入。
致以最良好的问候。