2013-02-19 51 views
0

我有一个GridView包含从两个文本框中提取的数据,点击一个按钮。我希望在GridView中实现以下功能: 1)我希望能够编辑此GridView中的数据。 2)我也应该能够从GridView中删除行。 3)最后,当我点击另一个提交按钮时,Gridview中的所有行应保存在数据库中。如何将数据从GridView保存到SQL Server 2005?如何编辑和删除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();   
    } 
} 
+0

选中这个'http:// www.c-sharpcorner.com/uploadfile/anjudidi/select-update-and-delete-data-in-a-Asp-Net-gridview-control /' – Dotnet 2013-02-19 13:43:32

回答

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> 

我建议你创建你的数据表中的新列,该列将每个寄存器的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注入。

此致敬礼。