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中截取 --------------------编程问答-------------------- 在页面内写一个方法一取... --------------------编程问答--------------------
顶了 --------------------编程问答-------------------- 把这句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 --------------------编程问答--------------------
顶起 --------------------编程问答-------------------- 同意4楼的做法,记得设定一个宽度这个样式才会生效 --------------------编程问答-------------------- 粘贴样式:
Style="white-space:nowrap; text-overflow:ellipsis; overflow:hidden;"
设置个宽度。好用
补充:.NET技术 , C#