如何将数据从GridView保存到SQL Server 2005?如何编辑和删除Gridview中的行?

问题描述 投票:0回答:1

我有一个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();        
    }   
}
c# asp.net sql-server sql-server-2005 gridview
1个回答
0
投票

在你的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 session并将它的值设置为DataTable的Column ID。

网格的属性OnRowCommand是单击按钮btnDeleteGrid时将调用的事件。该活动的代码如下:

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方面做得不是很好,所以如果我的代码有任何问题,请告诉我。

我认为如果使用Bulk Inserts来实现插入,效率会更高。搜索如何制作它,非常酷,快。

并且还尝试使用存储过程,因为它比使用直接命令文本更安全。使用它们将阻止SQL注入。

最好的祝福。

© www.soinside.com 2019 - 2024. All rights reserved.