GridView如何把某一个Column设置成DropDowsList?

rockyvan 2009-08-08 12:53:36
ASP.Net里面GridView如何把某一个Column设置成DropDowsList?
我按照MSDN上的例子没有做成功,哪位指点一下或者贴点代码。
我是按照MSDN上的这个文档做的:如何:自定义控件以便在 GridView Web 服务器控件中进行编辑
...全文
71 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivws_19 2009-08-08
  • 打赏
  • 举报
回复
设置成模板列不可以?
ljhcy99 2009-08-08
  • 打赏
  • 举报
回复
combobox列就可以了把?
rockyvan 2009-08-08
  • 打赏
  • 举报
回复
谢谢sp1234!
  • 打赏
  • 举报
回复
总结一下几个知识点:

1. 模板列中的DropdownList,你可以使用绑定表达式调用一个后台函数为其绑定DataSource,可以总是返回一个数据集合,也可以根据GridView的数据源每行数据不同动态生成不同的数据集合。

2. 为了避免过分地重复读取数据库,使用了数据缓存。例子中我维持5秒钟的缓存。

3. 可以在设计时绑定模板列中DropdownList的SelectedValue以及许多其它属性,即使在vs的智能感知中没有显示出来,你也可以大胆绑定。当然你要明白DropdownList确实有这些属性。

4. 如果需要捕获用户改变DropdownList值的事件,在这个事件中你可以直接了当地去FindControl其它模板列中的控件。(严格地说,能不能FindControl跟INamingContainer接口有关)。例子中假设第一列是一个“省级供货商名称”列,第五列是你的DropdownList,例子中就直接取出供货商名称然后把它跟同一省中某个客户(用户选择的)进行处理。

如果不需要捕获DropdownList的用户选择事件,直接 FindControl 找到这个 dr 然后读取其 SelectedValue 属性就可以了。
  • 打赏
  • 举报
回复
Get客户列表 方法后两行是多余的,之前写的代码没有删除:
protected string[] Get客户列表(string input)
{
string key=string.Format("查询{0}省的客户列表",input);
object res=this.Cache[key];
if(res==null)
{
res=向数据库查询某省的客户列表(input);
this.cache.Insert(key,res,null,
System.Web.Caching.Cache.NoAbsoluteExpiration,new TimeSpan(0,0,5));
}
return (string[])res;
}


再来看事件如何处理,假设模板中有一个列,里边有一个Label它的id是Name,它代表一个省级供货商,于是事件可以这样处理:
    protected void myList_Selected(object sender, EventArgs args)
{
DropDownList dr = sender as DropDownList;
Label nameLabel = dr.FindControl("Name") as Label;
处理供货商x向客户y供货关系(nameLabel.Text,dr.SelectedValue);
}
  • 打赏
  • 举报
回复
举个例子,假设要绑定数据源中“省份”列字段来产生各省的“客户”的列表然后作为DropdownList的数据源:

设计声明:
<ItemTemplate>
<asp:DropDownList runat="server" ID="myList" DataSource='<%# this.Get客户列表((string)Eval("省份")) %>'
SelectedValue='<%# Eval("客户") %>' OnSelectedIndexChanged="myList_Selected" />
</ItemTemplate>


这里,绑定“省份”来获得客户列表:
    protected string[] Get客户列表(string input)
{
string key=string.Format("查询{0}省的客户列表",input);
object res=this.Cache[key];
if(res==null)
{
res=向数据库查询某省的客户列表(input);
this.cache.Insert(key,res,null,
System.Web.Caching.Cache.NoAbsoluteExpiration,new TimeSpan(0,0,5));
}
return (string[])res;

ret[i] = input + "_" + i.ToString();
return ret;
}
spark_wu 2009-08-08
  • 打赏
  • 举报
回复
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
RHCL 2009-08-08
  • 打赏
  • 举报
回复
ItemTemplate
红街咖啡 2009-08-08
  • 打赏
  • 举报
回复
编辑模板?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧