0

我能够使用 C# 将数据从 DataGridView 插入到 Datatable。但我无法使用 c# windows 应用程序将数据从 Datagridview 更新到数据表?

   for (int i = 0; i <= dgvSpplrfrm.Rows.Count-1;i++)
        {
            drLocal = dtLocalC.NewRow();
            drLocal["splr_Slno"] = dgvSpplrfrm.Rows[i].Cells[0].Value;
            drLocal["splr_Cntctnm"] = dgvSpplrfrm.Rows[i].Cells[1].Value;
            drLocal["splr_Cntctdesig"] = dgvSpplrfrm.Rows[i].Cells[2].Value;
            drLocal["splr_Cntctmoblno"] = dgvSpplrfrm.Rows[i].Cells[3].Value;
            drLocal["splr_Cntctemail"] = dgvSpplrfrm.Rows[i].Cells[4].Value;
            dtLocalC.Rows.Add(drLocal);
        }
4

5 回答 5

2

只需你可以这样做:

public DataTable GetDataTable()
{
   return dgvSpplrfrm.Rows.Cast<DataRow>().CopyToDataTable();
}
于 2013-12-27T07:04:59.703 回答
1

确保您DataTable包含要复制的所有列。小心ColumnNameDataTableDataGridView。你可以试试这个:

public DataTable GetDataTable()
{
    DataTable dtLocalC = new DataTable();
    dtLocalC.Columns.Add("splr_Slno");
    dtLocalC.Columns.Add("splr_Cntctnm");
    dtLocalC.Columns.Add("splr_Cntctdesig");
    dtLocalC.Columns.Add("splr_Cntctmoblno");
    dtLocalC.Columns.Add("splr_Cntctemail");

    DataRow drLocal = null;
    foreach (DataGridViewRow dr in dgvSpplrfrm.Rows)
    {
        drLocal = dtLocalC.NewRow();
        drLocal["splr_Slno"] = dr.Cells["splr_Slno"].Value;
        drLocal["splr_Cntctnm"] = dr.Cells["splr_Cntctnm"].Value;
        drLocal["splr_Cntctdesig"] = dr.Cells["splr_Cntctdesig"].Value;
        drLocal["splr_Cntctmoblno"] = dr.Cells["splr_Cntctmoblno"].Value;
        drLocal["splr_Cntctemail"] = dr.Cells["splr_Cntctemail"].Value;
        dtLocalC.Rows.Add(drLocal);
    }

    return dtLocalC;
}
于 2013-04-05T12:34:18.783 回答
0

您需要查看将 DataTable 对象绑定到 DatagridView。

您可以使用 BindingSource 来执行此操作:-

http://msdn.microsoft.com/en-gb/library/system.windows.forms.bindingsource.aspx

希望这可以帮助。

于 2013-04-05T11:53:34.157 回答
0

一篇文章演示了如何从 GridView 中获取数据以及如何将其存储到 DataTable 中。看看下面的资源

资源链接

于 2013-04-05T11:58:44.280 回答
0

我试过这个..可能这个对你有帮助..

第1步:

将 GridView 拖到窗体上并将其 AutoGenerateColumns 属性设置为 False。

使用模板字段来显示 GridView 数据。根据您的要求设计 GridView。

<asp:GridView runat="server" ID="gvShoppingCart" AutoGenerateColumns="False" 
                 EmptyDataText="There is nothing in your shopping cart." GridLines="None" 
                 Width="31%" CellPadding="5" ShowFooter="True" DataKeyNames="BookId" onrowdeleting="gvShoppingCart_RowDeleting"  
                  >  
                 <HeaderStyle HorizontalAlign="Left" BackColor="#3D7169" ForeColor="#FFFFFF" />  
                 <FooterStyle HorizontalAlign="Right" BackColor="#6C6B66" ForeColor="#FFFFFF" />  
                 <AlternatingRowStyle BackColor="#F8F8F8" />  
                 <Columns>  
                      <asp:TemplateField HeaderText="Book Iamge">
                      <ItemTemplate>
                          <asp:Image ID="BookImg" ImageUrl='<%# Eval("BookImage") %>' runat="server" hight="15px" width="20px"/>

                      </ItemTemplate>
                      </asp:TemplateField>
                      <asp:TemplateField HeaderText="Book Name">  
                         <ItemTemplate>  
                             <asp:Label ID="lblBookName" runat="server" Text='<%#Eval("BookName")%>'></asp:Label><br /> 
                         </ItemTemplate>
                         </asp:TemplateField>
                      <asp:TemplateField HeaderText="Price">  
                         <ItemTemplate>  
                             <asp:Label ID="lblPrice" runat="server" Text='<%#Eval("Bookprice")%>'></asp:Label><br />  
                         </ItemTemplate>

                     </asp:TemplateField>  

                   <asp:TemplateField HeaderText="Quantity">
                  <ItemTemplate>
                      <asp:TextBox ID="TXTQty" runat="server"  Text="1" Width="40px" onkeyup="CalculateTotals();"></asp:TextBox>
                  </ItemTemplate>
                  <FooterTemplate>
                      <b>Total Amount:</b>
                  </FooterTemplate>
              </asp:TemplateField>
              <asp:TemplateField HeaderText="Total">
                  <ItemTemplate>
                      <asp:Label ID="LBLSubTotal" runat="server" ></asp:Label>
</ItemTemplate>
                  <FooterTemplate>
                      <asp:Label ID="LBLTotal" runat="server" ForeColor="White" ></asp:Label>
                  </FooterTemplate>
              </asp:TemplateField>

                     <asp:CommandField DeleteText="Remove" ShowDeleteButton="True" />

                 </Columns>  
             </asp:GridView>

在 Eval 中传递您的表列名称。

第2步:

使用以下代码从 GridView 获取数据并将其存储到 DataTable 中。

private void getGridInfo()
    {
        DataTable dt = new DataTable();
        DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("BookName", typeof(String)));
        dt.Columns.Add(new System.Data.DataColumn("BookQty", typeof(String)));
        dt.Columns.Add(new System.Data.DataColumn("BookImg", typeof(String)));

        foreach (GridViewRow row in gvShoppingCart.Rows)
        {
            Image Bookimg = (Image)row.FindControl("BookImg");
            Label Booknames = (Label)row.FindControl("lblBookName");
            TextBox Bookqty = (TextBox)row.FindControl("TXTQty");
            Label TotalPrice = (Label)row.FindControl("LBLTotal");
            dr = dt.NewRow();
            dr[0] = Booknames.Text;
            dr[1] = Bookqty.Text;
            dr[2] = Bookimg.ImageUrl.ToString();
            dt.Rows.Add(dr);
        }
        Session["QtyTable"] = dt;
        Response.Redirect("Admin/Default.aspx");
    } 

第 3 步:

在 dt.Columns.Add(new System.Data.DataColumn("BookName", typeof(String))) 中,您可以为该列编写任何标题文本。

在要将 GridView 数据存储到 DataTable 的地方调用此函数。

于 2013-04-05T13:57:39.737 回答