2017-04-21 40 views
0

我對asp.net中的開發很新穎。 我正在嘗試做的事情是編輯一個網格,提供一個特定列的下拉列表。DropDownList控件在鑄造期間在GridView中返回null

用戶故事:用戶在termSearch文本框中輸入文本;返回符合搜索條件的項目列表。活動狀態列只有2個有效值;活躍,不活躍。是

我的問題如下:

  1. 的DropDownList /文本沒有體現在設計,如果它是內模板列。當在TemplateField之外時,設計師檢測到它。
  2. 在轉換過程中,值被返回爲空。
  3. 在DataSource方法中,下拉列表(ddlActivity)返回null。

的GridView(活動狀態模板字段)

<Columns> 
    <asp:CommandField ShowEditButton="true" /> 

    <asp:BoundField DataField="CODE" ReadOnly="True" HeaderText="Term Code" HtmlEncode="False" Visible="true"> 
     <ItemStyle Width="24%" /> 
    </asp:BoundField> 

    <asp:BoundField DataField="DISPLAYLABEL" HeaderText="Label" HtmlEncode="False" Visible="true"> 
     <ItemStyle Width="24%" /> 
    </asp:BoundField> 

    <asp:TemplateField HeaderText="Activity Status"> 
     <ItemTemplate> 
      <asp:TextBox ID="lblActivity" runat="server" Text='<%#Bind("STATUS_FK") %>'></asp:TextBox> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:DropDownList ID="ddlActivity" runat="server" SelectedValue='<%# Bind("STATUS_FK") %>'> 
      </asp:DropDownList> 
     </EditItemTemplate> 
    </asp:TemplateField> 

    <asp:BoundField DataField="STRINGATTRIBUTE" HeaderText="String Attribute" HtmlEncode="False" Visible="true"> 
     <ItemStyle Width="24%" /> 
    </asp:BoundField> 
    <asp:BoundField DataField="LONGLABEL" HeaderText="Long Label" HtmlEncode="False" Visible="true"> 
     <ItemStyle Width="24%" /> 
    </asp:BoundField> 
</Columns> 

代碼後面

protected void gvSearch_DataBound(object sender, GridViewRowEventArgs e) 
{ 
    string code = termSearch.Text; 
    ddlActivity.DataSource = termDAO.SearchByCode(code); 
    DropDownList ddlActivityStatus = (DropDownList)e.Row.FindControl("ddlActivity"); 
    ddlActivityStatus.Items.Insert(0, new ListItem("--Select a Status--", "0")); 
    ddlActivityStatus.Items.Add(new ListItem("Active", "STATUS.A")); 
    ddlActivityStatus.Items.Add(new ListItem("Inactive", "STATUS.I")); 
} 

回答

0

ddlActivity處於EditItemTemplate。所以你必須檢查。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if ((e.Row.RowState & DataControlRowState.Edit) > 0) 
     { 
      DropDownList ddlActivityStatus = (DropDownList)e.Row.FindControl("ddlActivity"); 
     } 
    } 
}