我在ASP.NET中非常陌生。我要做的是在编辑栅格时,为特定列提供一个下拉列表。
用户故事:用户将文本输入tenter eread textbox;返回匹配搜索条件的项目列表。活动状态列只有2个有效值;主动,无活跃。
我的问题如下:
- 下拉列表/文本在设计器中不反映在templateField中。当在模板场外时,设计师会检测到它。
- 在演员表中,价值以零为单位。
- 在数据源方法中,下拉列表(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"));
}
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");
}
}
}