关于DataGrid中Template列的使用问题

expertwk 2003-09-29 04:41:36
我现在数据库表设计是这样的:
f_messname f_departname f_menu
01 0101 aa,bb,cc
01 0102 dd,ee,
02 0201 a1,b2,c3,d4


我要通过DataGrid显示为
======================================
f_messname f_departname f_menu
01 0101 aa,bb,cc
01 0102 dd,ee,ff
======================================
其中第三列f_menu中的每一项都是链接的,也就是点击aa,或者bb,都能够弹出一个新的页面
因为f_menu数据字段存的动态的,不知道具体的多少项,所以在
写templatecolumn 应该如何显示出来,并且带链接呢?

非常急,望高手不吝赐教!
...全文
39 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxzll 2003-09-30
  • 打赏
  • 举报
回复
第一行少加了一句话:
那样动态添加列也行,在datagrid中添加第四列,不可见,来显示那个字段的值,在
ItemCreated事件中取值,取值方法
chxzll 2003-09-30
  • 打赏
  • 举报
回复
那样动态添加列也行,在datagrid中添加第四列,不可见,来显示那个字段的值,取值方法
DataRowView datrowv;
datrowv = e.Item.DataItem;
If(IsNull(datrowv))
{
Return;
}
Else
{
string menu;
menu = datrowv[3];
//或者menu = datrowv["f_menu"];
string[] arr = menu.Split(",".ToCharArray());
Literal lit1;
for (int lp=1;lp<arr.Length;lp++)
{
lit1.Text += "<A href=a.aspx target=_blank>" + arr[lp].ToString() + "</A>";
e.Item.Cells(2).Controls.Add(lit1)
}
}
expertwk 2003-09-29
  • 打赏
  • 举报
回复
ok,前面定義了函數GetValue()用來生成"<A href=a.aspx target=_blank>" + arr1[i].ToString() + "</A>";
後面我在BindGrid()用
dt.Columns.Add (new DataColumn("menu", typeof(string)));
for(int i=0; i<=dt.Rows .Count -1; i++)
{
dt.Rows[i]["menu"]=GetValue(ds.Tables[0].Rows[i]["f_menu"].ToString());
}

謝謝大家了,結帖!
expertwk 2003-09-29
  • 打赏
  • 举报
回复
to:chxzll(小气包)
按照你的方法,我已經得到了Literal1.Text的值
但是最后显示在DataGrid中的仍然是空白,什么都没有,什么问题呀??

我跟踪过Literal1.Text的值,的确已经取得了,而且也通过了e.Item.Cells(2).Controls.Add
expertwk 2003-09-29
  • 打赏
  • 举报
回复
to:chxzll(小气包)
要如何读取第三列的值呢?
在BindGrid()中已经用SQL取出来
"select f_messid,f_departid,f_menu from m_menubar"
jackyhzzjcn 2003-09-29
  • 打赏
  • 举报
回复
楼上的方法可以,比较简单。

当然也可以动态增加HyperLink
chxzll 2003-09-29
  • 打赏
  • 举报
回复
你用VB还是用C#?
chxzll 2003-09-29
  • 打赏
  • 举报
回复
你在模板中置空<asp:TemplateColumn HeaderText="f_menu"></asp:TemplateColumn>
然后再在DataGrid控件的ItemCreated事件中做如下处理

.定义一个Literal控件类型的变量
Literal Literal1;
.读取第三列的值且将其用Split函数分成数组
注意访问时加条件
DataRowView datrowv;
datrowv = e.Item.DataItem;
If(IsNull(datrowv))
{
Return;
}
Else
{
//以下代码加在此
}

.做循环向Literal控件中加项
Literal1.Text += "<A href=a.aspx target=_blank>" + arr1[i].ToString() + "</A>";
.向模板列中添加该Literal控件
e.Item.Cells(2).Controls.Add(speList)
阿拉丁 2003-09-29
  • 打赏
  • 举报
回复
写错了

f_menu数据字段存的动态的,就将步奏3作成函数呀,根据comma(,)
自动换成"<a>XXX1</a>,<a>XXX2</a>,<a>XXX3</a>,...,<a>XXXn</a>,"
阿拉丁 2003-09-29
  • 打赏
  • 举报
回复
f_menu数据字段存的动态的,就将步奏3作成函数呀,根据compa(,)自动换成"<a>XXX</a>"
阿拉丁 2003-09-29
  • 打赏
  • 举报
回复
1、首先将数据库表的内容读到dataset
2、循环将f_menu的内容取出来分别处理
3、处理思路:比如string strMenu = "aa,bb,cc",通过replace,变成
strMenu = " <a href='ShowDetail.aspx?id=aa' target='_blank'>aa</a> "
+ " <a href='ShowDetail.aspx?id=bb' target='_blank'>bb</a> "
+ " <a href='ShowDetail.aspx?id=cc' target='_blank'>cc</a> ";
字符串处理,这不难吧???
4、Dataset绑定到DataGrid上,自动会变成链接的
5、ShowDetail.aspx中
protected override void PageInit()
{
strMenuID = Request.QueryString["id"];
//根据得到的ID(aa,bb or cc)将内容显示出来
}
yangzhenhai 2003-09-29
  • 打赏
  • 举报
回复
如果是一个怎么做呢?
dbx 2003-09-29
  • 打赏
  • 举报
回复
用数组呀。

for i = 0 to ubound(f_menu)
dim hy as new hyperlink
hy.navigaterurl=''''''''

'''''''
next

zhoulanga 2003-09-29
  • 打赏
  • 举报
回复
使用DataGrid模板,在模板列中使用一个链接

<asp:TemplateColumn>
<ItemTemplate>
<a href='client_.aspx?editid=<%#DataBinder.Eval(Container.DataItem,"f_messname")%> '><%#DataBinder.Eval(Container.DataItem,"f_menu")%></a>
</ItemTemplate>
</asp:TemplateColumn>
这样就可以实现了
expertwk 2003-09-29
  • 打赏
  • 举报
回复
楼上的,如果是1个,非常容易了,关键是现在确定不了f_menu有几项值,
不可能动态生成多个hyperlink吧????然后再分别写navigaterurl
yangzhenhai 2003-09-29
  • 打赏
  • 举报
回复
我也想问这个,请高手出现
用hyperlink 但是怎么使他的navigaterurl 为 mail.aspx?id=第三列的值 这样的形式?

62,041

社区成员

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

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

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

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