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

gridview字符太长改成省略号的问题

前台aspx代码:
 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  
            ShowHeader=False   BorderWidth=0px  
        DataSourceID="SqlDataSource1" DataKeyNames="id">
        <Columns>
          
            <asp:TemplateField HeaderText="topic" SortExpression="topic"  ItemStyle-HorizontalAlign=Left>
                <ItemTemplate >
                    <asp:HyperLink ID="HyperLink1" runat="server" ForeColor="#184073"  Font-Size="14px"  NavigateUrl='<%# Eval("id","view.aspx?id={0}") %>'  Text='<%# Bind("topic") %>'></asp:HyperLink>
                </ItemTemplate>

             <ItemStyle HorizontalAlign="Left" Width="300px"></ItemStyle>
            </asp:TemplateField>
           </Columns>
            </asp:GridView>
后台cs代码:
           foreach (GridViewRow gvr in GridView1.Rows)
             {
               string ginto = Convert.ToString(((HyperLink)gvr.FindControl("HyperLink1")).Text);
              ((HyperLink)gvr.FindControl("HyperLink1")).Text = SubStr(ginto,20);
           
             }
           
        }

        public string SubStr(string sString, int nLeng)
        {
            if (sString.Length <= nLeng)
            {
                return sString;
            }
            else
            {
                string sNewStr = sString.Substring(0, nLeng);
                sNewStr = sNewStr + "…";
                return sNewStr;
            }
为什么topic字段不管字符超不超过20个,都加上了省略号,是不是无法判断gridview中 ((HyperLink)gvr.FindControl("HyperLink1")).Text 的长度?

另想问,在a页面中,通过前台传值<li><a href="index.aspx?id=1"></a>链接</li>,在另一个b页面中的iframe打开页面时,为什么会出现中文乱码 --------------------编程问答-------------------- 断点调试
看看
Convert.ToString(((HyperLink)gvr.FindControl("HyperLink1")).Text)的内容及ginto.Length

出现乱码,应该是页面编码的问题 --------------------编程问答-------------------- 是不是你默认的列宽太小了呀
--------------------编程问答--------------------  foreach (GridViewRow gvr in GridView1.Rows)
  {
  string ginto = Convert.ToString(((HyperLink)gvr.FindControl("HyperLink1")).Text);
  ((HyperLink)gvr.FindControl("HyperLink1")).Text = SubStr(ginto,20);
    
  }


这个是写在哪个地方,何时触发的,可能也有影响. --------------------编程问答-------------------- 看能否用样式表处理:

CSS控制: 文章的标题长度,溢出文字用省略号代替

/*-----溢出文字用省略号代替---*/
      white-space:nowrap;
      text-overflow:ellipsis;
      overflow:hidden;
--------------------编程问答--------------------
把你后台方法参数改成object

 public string SubStr(object sString, object nLeng)
  {
      int i = Convit.Toint32(nLeng);
     string str = sString.Tostring();
  if (str.Length <= i)
  {
      return str;
  }
  else
  {
      string sNewStr = sString.Substring(0, i);
      sNewStr = sNewStr + "…";
      return sNewStr;
  }



前台:

Text='<%#  SubStr(Bind("topic"),10) %>' --------------------编程问答-------------------- 中文乱码检查页面编码
public string Strsplit(string str,int maxlength)
{
string strg=string.empty;
 if(str.Length>maxlength)
  strg=str.substring(0,maxlength)+"...";
else
  strg=str;
return str;
}

DataTextField= <%# Strsplit(Eval("").ToString(),10) %>
RowDataBound中截取 --------------------编程问答-------------------- 在页面内写一个方法一取... --------------------编程问答--------------------
引用 4 楼 sxldfang 的回复:
看能否用样式表处理:

CSS控制: 文章的标题长度,溢出文字用省略号代替

/*-----溢出文字用省略号代替---*/
  white-space:nowrap;
  text-overflow:ellipsis;
  overflow:hidden;


顶了 --------------------编程问答-------------------- 把这句string ginto = Convert.ToString(((HyperLink)gvr.FindControl("HyperLink1")).Text);里面的Convert.Tostring换成string ginto = (((HyperLink)gvr.FindControl("HyperLink1")).Text).ToString();这样,就可以了,呵呵,谢谢大家, --------------------编程问答-------------------- 页面乱码的问题还没有解决啊,B页面有两个iframe,左侧iframe1,右侧iframe2,在左边iframe1里的下拉菜单里链接,  <a href="1.aspx" target="iframe2">链接</a>没有乱码,1.aspx页面里就几行汉字,但是在a页面里有一个超链接<li><a href="b.aspx?id=5">链接</a>,用js传值过来在B页面的iframe2里打开1.aspx,就出现中文乱码了, --------------------编程问答-------------------- mark --------------------编程问答-------------------- 不知道这段代码是不是你想要的。Gridview里面

 <asp:TemplateField HeaderText="内容">
 <ItemTemplate>
 <asp:Label ID="Label1" runat="server" Text='<%# Eval("Content").ToString().Length>20?Eval("Content").ToString().Substring(0,20)+"..":Eval("Content") %>' ToolTip='<%# Eval("Content")%>'></asp:Label>
 </ItemTemplate>
 </asp:TemplateField>
--------------------编程问答-------------------- 解决方法:数据绑定后过滤每一行即可
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
        {
            DataRowView mydrv;
            string gIntro;
            if (GridView1.PageIndex == 0)
            {
                mydrv = myds.Tables["飞狐工作室"].DefaultView[i];//表名
                gIntro = Convert.ToString(mydrv["家庭住址"]);//所要处理的字段
                GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);
            }
            else
            {
                mydrv = myds.Tables["飞狐工作室"].DefaultView[i + (5 * GridView1.PageIndex)];
                gIntro = Convert.ToString(mydrv["家庭住址"]);
                GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);
            }
        } 

调用的方法:

    public string SubStr(string sString, int nLeng)
    {
        if (sString.Length <= nLeng)
        {
            return sString;
        }
        string sNewStr = sString.Substring(0, nLeng);
        sNewStr = sNewStr + "...";
        return sNewStr;
    }

后台全部代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page 
{
    SqlConnection sqlcon;
    SqlCommand sqlcom;
    string strCon = "Data Source=(local);Database=北风贸易;Uid=sa;Pwd=sa";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewState["SortOrder"] = "身份证号码";
            ViewState["OrderDire"] = "ASC";
            bind();
        }
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        bind();
    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string sqlstr = "delete from 飞狐工作室 where 身份证号码='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
        sqlcon = new SqlConnection(strCon);
        sqlcom = new SqlCommand(sqlstr,sqlcon);
        sqlcon.Open();
        sqlcom.ExecuteNonQuery();
        sqlcon.Close();
        bind();
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        sqlcon = new SqlConnection(strCon);
        string sqlstr = "update 飞狐工作室 set 姓名='"
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',家庭住址='"
            + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where 身份证号码='" 
            + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
        sqlcom=new SqlCommand(sqlstr,sqlcon);
        sqlcon.Open();
        sqlcom.ExecuteNonQuery();
        sqlcon.Close();
        GridView1.EditIndex = -1;
        bind();
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;
        bind();
    }
    public void bind()
    {
        string sqlstr = "select top 5 * from 飞狐工作室";
        sqlcon = new SqlConnection(strCon);
        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
        DataSet myds = new DataSet();
        sqlcon.Open();
        myda.Fill(myds, "飞狐工作室");
        GridView1.DataSource = myds;
        GridView1.DataKeyNames = new string[] { "身份证号码" };
        GridView1.DataBind();
        for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
        {
            DataRowView mydrv;
            string gIntro;
            if (GridView1.PageIndex == 0)
            {
                mydrv = myds.Tables["飞狐工作室"].DefaultView[i];
                gIntro = Convert.ToString(mydrv["家庭住址"]);
                GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);
            }
            else
            {
                mydrv = myds.Tables["飞狐工作室"].DefaultView[i + (5 * GridView1.PageIndex)];
                gIntro = Convert.ToString(mydrv["家庭住址"]);
                GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);
            }
        }
        
        sqlcon.Close();
    }
    public string SubStr(string sString, int nLeng)
    {
        if (sString.Length <= nLeng)
        {
            return sString;
        }
        string sNewStr = sString.Substring(0, nLeng);
        sNewStr = sNewStr + "...";
        return sNewStr;
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //如果是绑定数据行 
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            ////鼠标经过时,行背景色变 
            //e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#E6F5FA'");
            ////鼠标移出时,行背景色变 
            //e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");

            ////当有编辑列时,避免出错,要加的RowState判断 
            //if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
            //{
            //    ((LinkButton)e.Row.Cells[6].Controls[0]).Attributes.Add("onclick", "javascript:return confirm('你确认要删除:\"" + e.Row.Cells[1].Text + "\"吗?')");
            //}

        }
        if (e.Row.RowIndex != -1)
        {
            int id = e.Row.RowIndex + 1;
            e.Row.Cells[0].Text = id.ToString();
        }

    }
}
http://wenku.baidu.com/view/7626f4f8941ea76e58fa04da.html --------------------编程问答--------------------
引用 12 楼 shi2310 的回复:
不知道这段代码是不是你想要的。Gridview里面

C# code

 <asp:TemplateField HeaderText="内容">
 <ItemTemplate>
 <asp:Label ID="Label1" runat="server" Text='<%# Eval("Content").ToString().Length>20?Eval("Content").ToS……

顶起 --------------------编程问答-------------------- 同意4楼的做法,记得设定一个宽度这个样式才会生效 --------------------编程问答-------------------- 粘贴样式:
Style="white-space:nowrap; text-overflow:ellipsis; overflow:hidden;"
设置个宽度。好用
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,