当前位置:编程学习 > C#/ASP.NET >>

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属性,这个属性是用来设置要绑定显示的数据的属性或者列名。在这里我们希望在显示的时候给出一个链接,用户可以点击这个链接跳转到查看详细介绍的页面,并且我们还希望将用户的电子邮件显示成超级链接的方式。
--------------------编程问答--------------------

<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> 

--------------------编程问答-------------------- protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //控制字符显示长度,若大于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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,