2012-08-16 32 views
0

文本框和下拉列表填充的GridView我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> 

現在我想填補這個電網與數據庫中的數據,我有我所有的數據返回DataTable的一個方法

時我填寫mygrid:

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

在這種情況下,所有TextBoxes和DropDownList都爲null。

在下面的代碼中,我試圖創建一個從數據庫接收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; 
    } 

回答

1

在綁定字段的DataField屬性必須等於column name在數據表中。 對於在模板字段中綁定文本框,您可以使用評估或綁定方法。

實施例:

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

和用於在GridView裝訂的下拉中,可以使用單獨的SQL數據源。並指定下拉列表DataSourceID,DataTextField和DataValueField屬性。

DROPDOWNLIST例子:

<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"; 
    } 

}

+0

,如果我有什麼的幾個文本框,我想從這些文本框的信息填充一個GridView。 – Si8 2014-07-03 22:43:22