【问题标题】:Fill GridView with TextBoxes and Dropdownlist from DataTable用 DataTable 中的 TextBoxes 和 Dropdownlist 填充 GridView
【发布时间】:2012-08-16 10:23:21
【问题描述】:

我有 GridView:

  <asp:GridView ID="MyGridView" runat="server" ShowFooter="true"
                                     AutoGenerateColumns="False" Visible="True">
<Columns>
<asp:BoundField DataField="id" ItemStyle-HorizontalAlign="center"/>
<asp:BoundField DataField="fullName"  />
<asp:TemplateField HeaderText="situation>">
<ItemTemplate>
  <asp:DropDownList ID="dl_situation" runat="server" AppendDataBoundItems="true">
   </asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="procesVerbal">
 <ItemTemplate>
         <asp:TextBox ID="tbNr" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>  

<asp:TemplateField HeaderText="Data">
<ItemTemplate>
               <asp:TextBox ID="tbDate" runat="server"></asp:TextBox>
 </ItemTemplate>
</asp:TemplateField>     
</Columns>
</asp:GridView>

现在我想用数据库中的数据填充这个网格,我有一种方法可以返回包含我所有数据的数据表

当我填满我的网格时:

 MyGridView.DataSource = dataTable;
 MyGridView.Databind();

在这种情况下,所有的 TextBoxes 和 DropDownList 都是空的。

在下面的代码中,我试图创建一个从数据库接收 DataTable 并用数据填充 gridview 的函数。如何为 dataTable.Rows 创建一个 foreach 语句,将文本值分配给 TextBox 元素并将 selectedIndex 值分配给 DropDownList?

protected bool FillGridWithData(DataTable dataTable)
       {bool result;
       try
       {
           foreach (GridViewRow row in MyGridView1.Rows)
           {
               if (row.RowType != DataControlRowType.DataRow) break;
               var ddl = (DropDownList)row.FindControl("dl_situation");
               if (ddl != null)
               {
                 ddl.DataSource = PublicStatic.Situation;
                 ddl.DataTextField = PublicStatic.Name;
                 ddl.DataValueField = PublicStatic.Code;
                 ddl.DataBind();
                 ddl.Items.Insert(0, new ListItem(String.Empty, String.Empty));
                 ddl.SelectedIndex = //data from datatable;
               }
               var tb1 = (TextBox)row.FindControl("tbNr");
               if (tb1 != null)
                   tb1.Text =//data from datatable;

               var tb2 = (TextBox)row.FindControl("tbDate");
               if (tb2 != null)
                   tb2.Text = //data from datatable;
           }
           result = true;
       }
       catch (Exception exception)
       {
           result = false;
       }
       return result;
   }

【问题讨论】:

    标签: c# asp.net gridview textbox


    【解决方案1】:

    绑定字段中的DataField 属性必须等于数据表中的column name。 对于模板字段中的绑定文本框,您可以使用 Eval 或 Bind 方法。

    示例:

    <asp:TemplateField HeaderText="procesVerbal">
     <ItemTemplate>
         <asp:TextBox ID="tbNr" Text='<%# Eval("ColumnName") %>' runat="server"></asp:TextBox>
     </ItemTemplate>
    </asp:TemplateField>  
    

    为了在gridview 中绑定下拉菜单,您可以使用单独的sql 数据源。并指定下拉列表 DataSourceID、DataTextField 和 DataValueField 属性。

    下拉列表示例:

    <asp:TemplateField>
         <ItemTemplate>
            <asp:DropDownList ID="ddl" runat="server"  DataSourceID="SqlDataSource1" DataTextField="ProductName" DataValueField="ProductID" ></asp:DropDownList>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT [ProductName], [ProductID] FROM [Alphabetical list of products]"></asp:SqlDataSource>
         </ItemTemplate>
    </asp:TemplateField>
    

    如果你想从后面的代码中绑定数据源,那么你可以使用RowDataBound gridview 事件

    protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
    
        if(e.Row.RowType == DataControlRowType.DataRow)
        {           
            TextBox t = (TextBox)e.Row.FindControl("ControlID"); 
            t.Text = "Some Text";
        }
    

    }

    【讨论】:

    • 如果我有几个文本框,我想从这些文本框的信息中填充一个 GridView。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多