关于DataGrid中Template列的使用问题 我也想问这个,请高手出现用hyperlink 但是怎么使他的navigaterurl 为 mail.aspx?id=第三列的值 这样的形式? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上的,如果是1个,非常容易了,关键是现在确定不了f_menu有几项值,不可能动态生成多个hyperlink吧????然后再分别写navigaterurl 使用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>这样就可以实现了 用数组呀。for i = 0 to ubound(f_menu) dim hy as new hyperlink hy.navigaterurl='''''''' '''''''next 1、首先将数据库表的内容读到dataset2、循环将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)将内容显示出来 } f_menu数据字段存的动态的,就将步奏3作成函数呀,根据compa(,)自动换成"<a>XXX</a>" 写错了f_menu数据字段存的动态的,就将步奏3作成函数呀,根据comma(,)自动换成"<a>XXX1</a>,<a>XXX2</a>,<a>XXX3</a>,...,<a>XXXn</a>," 你在模板中置空<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) 楼上的方法可以,比较简单。当然也可以动态增加HyperLink to:chxzll(小气包)要如何读取第三列的值呢?在BindGrid()中已经用SQL取出来"select f_messid,f_departid,f_menu from m_menubar" to:chxzll(小气包)按照你的方法,我已經得到了Literal1.Text的值但是最后显示在DataGrid中的仍然是空白,什么都没有,什么问题呀?? 我跟踪过Literal1.Text的值,的确已经取得了,而且也通过了e.Item.Cells(2).Controls.Add 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());}謝謝大家了,結帖! 那样动态添加列也行,在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) }} 第一行少加了一句话:那样动态添加列也行,在datagrid中添加第四列,不可见,来显示那个字段的值,在ItemCreated事件中取值,取值方法 如何使用通用的“控件”来操作? .Net在线客户访问服务器系统 新手求教数据库的设计和读取 页面传值问题 存储过程问题 .net 怎么用FlashPaper 自动转换阿 有人用microsoft visio软件导出SQL Server数据库表字典的报表吗? 非常头痛的问题 关于IIS 怎样通过url建立读取网页的流,很弱智的问题 如何定义一个键盘热键 来代替 shift+tab 事件,在线等 如何使数据验证控件只显示一条验证信息? 两个数据集怎样相加?急!!!!
不可能动态生成多个hyperlink吧????然后再分别写navigaterurl
<ItemTemplate>
<a href='client_.aspx?editid=<%#DataBinder.Eval(Container.DataItem,"f_messname")%> '><%#DataBinder.Eval(Container.DataItem,"f_menu")%></a>
</ItemTemplate>
</asp:TemplateColumn>
这样就可以实现了
dim hy as new hyperlink
hy.navigaterurl='''''''' '''''''
next
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)将内容显示出来
}
自动换成"<a>XXX1</a>,<a>XXX2</a>,<a>XXX3</a>,...,<a>XXXn</a>,"
然后再在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)
要如何读取第三列的值呢?
在BindGrid()中已经用SQL取出来
"select f_messid,f_departid,f_menu from m_menubar"
按照你的方法,我已經得到了Literal1.Text的值
但是最后显示在DataGrid中的仍然是空白,什么都没有,什么问题呀?? 我跟踪过Literal1.Text的值,的确已经取得了,而且也通过了e.Item.Cells(2).Controls.Add
後面我在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());
}謝謝大家了,結帖!
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)
}
}
那样动态添加列也行,在datagrid中添加第四列,不可见,来显示那个字段的值,在
ItemCreated事件中取值,取值方法