如何将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();        
    }   
}

如何将GridView中的数据保存到SQLServer2005?如何在网格视图中编辑和删除行

在你的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注入。

致以最良好的问候。