在GridView模板列内的DropDownList,如何绑定树形数据

瘦马 2012-09-28 10:47:49
数据库结构

nodeid 代码
name 名称
parentid 父ID


前台aspx文件

…………
<form id="form1" runat="server">
<asp:GridView ID="GridView1" RowDataBound="GridView1_RowDataBound" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="第一列" />
<asp:BoundField HeaderText="第二列" />
<asp:BoundField HeaderText="第三列" />
<asp:BoundField HeaderText="第四列" />
<asp:BoundField HeaderText="第五列" />
<asp:TemplateField HeaderText="模板列">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1"runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
…………


后台C#

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
DropDownList drop = e.Row.FindControl("DropDownList1") as DropDownList;
…………//此处该如何写代码?
//将数据库中的树形数据绑定在DropDownList1中


}
...全文
154 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
瘦马 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

在GridView1_RowDataBound内引用有问题吗》?
[/Quote]

老大,帮帮我吧,用你提供的那个例子不行,只返回了一级分类,是我太菜了,
我的数据库就三个字段 nodeid displayname parentnodeid
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
在GridView1_RowDataBound内引用有问题吗》?
瘦马 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

GridView1_RowDataBound是得到每行的

我给你的例子,应该是生成的数据,你直接
drop.DataSource =那个生成的数据源
drop.DataBind()就成了
[/Quote]

关键之处在于,此DropDownList是在gridview内的子控件
必须在GridView1_RowDataBound内才能引用,在其他地方无法用DropDownList1.datasource这样的方法
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
GridView1_RowDataBound是得到每行的

我给你的例子,应该是生成的数据,你直接
drop.DataSource =那个生成的数据源
drop.DataBind()就成了
瘦马 2012-09-29
  • 打赏
  • 举报
回复
需要两个过程(方法),能不能在一个事件中解决(GridView1_RowDataBound)
  • 打赏
  • 举报
回复
呵呵,浏览器上看到的都是‘假’的


/// <summary>
/// 将多级分类的数据绑定到DropDownList上
/// </summary>
public static void BindDrpClass(string parentid, DataTable dt, string blank, string travel, DropDownList controlID)
{
DataRow[] drs = dt.Select(" Father= '" + parentid + "'");
foreach (DataRow dr in drs)
{
string classid = dr["ID"].ToString();
string classname = dr["_Name"].ToString();
classname = blank + classname;
string travel2 = classid;
string blank2 = "│" + HttpUtility.HtmlDecode("  ") + blank;
controlID.Items.Add(new ListItem(classname, travel2));
BindDrpClass(classid, dt, blank2, travel2, controlID);
}
}

/// <summary>
/// 将多级分类的数据绑定到DropDownList上
/// </summary>
public static void BindDrpClass(string parentid, DataTable dt, string blank, string travel, HtmlSelect controlID)
{
DataRow[] drs = dt.Select(" Father= '" + parentid + "'");
foreach (DataRow dr in drs)
{
string classid = dr["ID"].ToString();
string classname = dr["_Name"].ToString();
classname = blank + classname;
string travel2 = classid;
string blank2 = "│" + HttpUtility.HtmlDecode("  ") + blank;
controlID.Items.Add(new ListItem(classname, travel2));
BindDrpClass(classid, dt, blank2, travel2, controlID);
}
}

暖枫无敌 2012-09-29
  • 打赏
  • 举报
回复
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
也就是这样
http://www.cnblogs.com/zkxp/archive/2006/04/24/383687.html
瘦马 2012-09-29
  • 打赏
  • 举报
回复
谢谢net_love,能不能具体一点
孟子E章 2012-09-29
  • 打赏
  • 举报
回复
DropDownList 的树形,原理就是在option前面添加空格形成不同层次的效果
瘦马 2012-09-29
  • 打赏
  • 举报
回复
再次求助

62,133

社区成员

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

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

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

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