C# 为gridview内的下拉列表设置数据源
我正在使用以下代码为gridview中的下拉菜单设置数据源,但它不起作用C# 为gridview内的下拉列表设置数据源,c#,asp.net,C#,Asp.net,我正在使用以下代码为gridview中的下拉菜单设置数据源,但它不起作用 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { DropDownList drop = (DropDownList)e.Row.FindControl("folderslist"); drop.DataSource = list; drop.DataBind(
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DropDownList drop = (DropDownList)e.Row.FindControl("folderslist");
drop.DataSource = list;
drop.DataBind();
}
list是一个字符串列表,它将find绑定到gridview外部的下拉列表。但是,上面的代码不会在gridview中填充dropsdown
<asp:GridView ID="GridView1" HorizontalAlign="Center"
AutoGenerateColumns="false" CellSpacing="5" CellPadding="5" CssClass="GridView" Font-Size="Small"
runat="server" OnRowDataBound = "GridView1_RowDataBound" >
<Columns>
<asp:BoundField HeaderText="From" DataField="From" />
<asp:BoundField HeaderText="Subject" DataField="Subject" />
<asp:BoundField HeaderText="Received" DataField="Received" />
<asp:TemplateField HeaderText="Attachments" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton runat="server" ID="attach" CommandName="viewattachments" Text="More"
ImageUrl="~/images/notes.png" visible='<%# System.Convert.ToBoolean((DataBinder.Eval(Container.DataItem, "Attachments").ToString() == "") ? false : true) %>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Move To" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:DropDownList ID="folderslist" runat="server"></asp:DropDownList>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
</Columns>
</asp:GridView>
gridview中的下拉列表是
文件夹
而不是文件夹列表
。在e.Row.FindControl()方法中指定文件夹。调试代码可以帮助您了解发生了什么。还要确保列表中有数据
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DropDownList drop = (DropDownList)e.Row.FindControl("folders");
drop.DataSource = list;
drop.DataBind();
}
asp:DropDownList
绑定到数据源项的属性,并且字符串类型没有返回其值的属性。尝试将每个字符串包装到辅助对象中:
class StringHolder
{
public StringHolder(string displayText) { DisplayText = displayText; }
public string DisplayText { get; set;}
}
IList<StringHolder> WrapStrings(IList<string> strings)
{
return strings.Select(it => new StringHolder(it)).ToList());
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DropDownList drop = (DropDownList)e.Row.FindControl("folderslist");
drop.DataTextField = "DisplayText";
drop.DataSource = WrapStrings(list);
drop.DataBind();
}
class-StringHolder
{
公共字符串持有者(字符串显示文本){displayText=displayText;}
公共字符串DisplayText{get;set;}
}
IList包装字符串(IList字符串)
{
返回strings.Select(it=>newstringholder(it)).ToList();
}
受保护的void GridView1_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
DropDownList drop=(DropDownList)e.Row.FindControl(“folderslist”);
drop.DataTextField=“DisplayText”;
drop.DataSource=包装(列表);
drop.DataBind();
}
您能告诉我们gridview和dropdown在html端的位置吗?我刚刚更改了,我正在测试一些东西。它们的名称正确。您是否可以找到其他控件,如ID为“attach”的ImageButton?我在drop.DataTextField=“DisplayText”上遇到一个错误“对象引用未设置为对象的实例”;行。我如何添加到列表中?我是在使用列表,还是您已经定义了它。
private void grdCoboFill()
{
DataTable dt = new DataTable();
dt.Columns.Add("ColorID", typeof(int));
dt.Columns.Add("ColorName", typeof(String));
dt.Rows.Add(new Object[] { 1, "RED" });
dt.Rows.Add(new Object[] { 2, "GREEN" });
dt.Rows.Add(new Object[] { 3, "BLUE" });
foreach (GridViewRow row in this.GridView1.Rows)
{
((DropDownList)row.FindControl("DropDownList1")).DataSource = dt;
((DropDownList)row.FindControl("DropDownList1")).DataValueField = "ColorID";
((DropDownList)row.FindControl("DropDownList1")).DataTextField = "ColorName";
((DropDownList)row.FindControl("DropDownList1")).DataBind();
}
}