GirdView一个链接字段列,是否可以用DataBound事件来截取他的 字数长度? 急~~~
我GirdView里面 一个字段的链接 列<asp:HyperLinkField DataNavigateUrlFields="uAdviseID" DataNavigateUrlFormatString="provientManagerShow.aspx?uAdviseID={0}"
DataTextField="uAdviseCon" HeaderText="客户意见" SortExpression="uAdviseConID" target ="mainFrameProvient"/>
protected void GridView1_DataBound(object sender, EventArgs e)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
if (GridView1.Rows[i].Cells[2].Text.ToString().Length > 10)//Cells[2]是你要限定字符的列数
{
GridView1.Rows[i].Cells[2].Text = GridView1.Rows[i].Cells[2].Text.ToString().Substring(0, 10) + "...";
}
}
用下面这个方法 截取字段的字数长度,如果是正常的 列,没问题, 但是是 HyperLinkField 这个链接的形式,我这个方法不行,
读取不到他的TEXT 值, 谁有好的办法波?
--------------------编程问答-------------------- for (int i = 0; i < ds.Tables[0].Rows.Count; i++) {
if (ds.Tables[0].Rows[i]["tile"].ToString().Length > 10)
{
ds.Tables[0].Rows[i]["tile"] = ds.Tables[0].Rows[i]["tile"].ToString().Substring(0, 10) + "...";
}
}
this.DataList3.DataSource = ds;
this.DataList3.DataBind();
<a href="zsjs.aspx?id=<%#Eval("id") %>" style="text-decoration: none; color:#000000">  <%#Eval("tile") %></div> </a>
--------------------编程问答-------------------- 不會。
不過你看這樣行不行,你在模板列里再放一個隱藏的label,用隱藏的lable來讀取uAdviseID,然后用lable來判斷再送給hyperlink. --------------------编程问答-------------------- 你如果是用模板列,如下:
DataBound事件里面写
HyperLink hl = (HyperLink)e.Row.FindControl("控件ID名");
if(hl!=null)
{
if(hl.Text.ToString().Length >10)
{
hl.Text = hl.Text.SubString(0,10)+"...";
}
} --------------------编程问答-------------------- 一楼的方法,是用DataList来做的话,确实很好做
但是 整个项目已经用了 GV了, 我如果要改的话, 工作量会很大了
GV里面能否 有办法解决 --------------------编程问答-------------------- 直接用模版列,定义成超级链接不就行了,你那么做不觉得麻烦? --------------------编程问答-------------------- 从上面的图中我们可以看出在GridView中可以显示7中类型的字段,它们分别是:
BoundField:绑定字段,以文本的方式显示数据。
CheckBoxField:复选框字段,如果数据库是bit字段,则以此方式显示。
HyperLinkField:用超级连接的形式的显示字段值。
ImageField:用于显示存放Image图象的url字段数据,显示成图片效果。
ButtonField:显示按钮列。
CommandField:显示可执行操作的列,可以执行编辑或者删除等操作。可以设置它的ButtonType属性来决定显示成普通按钮、图片按钮或者超级链接。
TemplateField:自定义数据的显示方式,在这里我们可以使用我们所熟悉的HTML控件或者asp.net Web服务器控件。
对于我们经常使用到的Users这个表,这次我们不再使用for循环来显示了,这次使用GridView控件来显示。GridView控件的字段大都有HeaderText这个属性,这个属性是用来设置数据的镖头的,如果我们不设置的话默认都是以数据库的相应字段作为表头。另外还有一个DataField属性,这个属性是用来设置要绑定显示的数据的属性或者列名。在这里我们希望在显示的时候给出一个链接,用户可以点击这个链接跳转到查看详细介绍的页面,并且我们还希望将用户的电子邮件显示成超级链接的方式。
--------------------编程问答--------------------
--------------------编程问答-------------------- protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
<asp:GridView ID="gvUserList" runat="server" AutoGenerateColumns="False" OnPageIndexChanging="gvUserList_PageIndexChanging">
<Columns>
<asp:BoundField DataField="UserId" HeaderText="编号" />
<asp:HyperLinkField DataNavigateUrlFields="UserId" DetailsViewDemo.aspx?UserId={0}"
DataTextField="RealName" HeaderText="查看" />
<asp:BoundField DataField="UserName" HeaderText="用户名" />
<asp:BoundField DataField="RealName" HeaderText="真实姓名" />
<asp:BoundField DataField="Age" HeaderText="年龄" />
<asp:CheckBoxField DataField="Sex" HeaderText="男" />
<asp:BoundField DataField="Mobile" HeaderText="手机" />
<asp:TemplateField HeaderText="电子邮件">
<AlternatingItemTemplate>
<a href='emailto:<%#Eval("Email") %>'>发电子给<%#Eval("RealName") %></a>
</AlternatingItemTemplate>
<ItemTemplate>
<%#Eval("Email") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="电子邮件">
<ItemTemplate>
<a href=provientManagerShow.aspx?uAdviseID=<%#Eval("uAdviseID") %>'><%#Eval("uAdviseCon").TOString().SubString(0,10) %></a>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
{
//控制字符显示长度,若大于18个字符,显示前18个,后加"..."
for (int i = 0; i <e.Row.Cells.Count; i++)
{
if (e.Row.Cells[i].Text.Length > 18)
{
e.Row.Cells[i].Text = e.Row.Cells[i].Text.Substring(0, 18) + "...";
}
}
}
--------------------编程问答-------------------- 你如果是用模板列,如下:
DataBound事件里面写
HyperLink hl = (HyperLink)e.Row.FindControl("控件ID名");
if(hl!=null)
{
if(hl.Text.ToString().Length >10)
{
hl.Text = hl.Text.SubString(0,10)+"...";
}
}
同意该观点
补充:.NET技术 , ASP.NET