我在datagrid的ItemDataBound事件中,想处理当字数太长的时候截断,并给这一行的ToolTip附上该字段的值,代码如下:
private void dg_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if ( ( e.Item.ItemType != ListItemType.Header ) && ( e.Item.ItemType != ListItemType.Footer ))
{
HyperLink lj= ( HyperLink ) e.Item.Cells[1].Controls[0];
if(lj != null)
{
if(this.ShowNum>0)
{
e.Item.Cells[1].ToolTip=lj.Text;
if(lj.Text.Length>this.ShowNum)
{
e.Item.Cells[1].Text="<a href=" + lj.NavigateUrl + "&table=" + table + ">" + lj.Text.Substring(0,ShowNum) + "..." + "</a>";
}
else
{
e.Item.Cells[1].Text="<a href=" + lj.NavigateUrl + "&table=" + table + ">" + lj.Text + "</a>";
}
}
else
{
e.Item.Cells[1].Text="<a href=" + lj.NavigateUrl + "&table=" + table + ">" + lj.Text + "</a>";
}
}
if(e.Item.ItemIndex!=-1)
{
HyperLink hk=(HyperLink)e.Item.FindControl("HyperLink1");
if(hk != null)
hk.NavigateUrl="input.aspx?id=" + this.dg.DataKeys[e.Item.ItemIndex].ToString();
}
}
}但是,显示出来的时候,在分页里,第一页没问题,但是只要点击其它页就出现如下错误:指定的参数已超出有效值的范围。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: index源错误: 行 95: if ( ( e.Item.ItemType != ListItemType.Header ) && ( e.Item.ItemType != ListItemType.Footer ))
行 96: {
行 97: HyperLink lj= ( HyperLink ) e.Item.Cells[1].Controls[0];
行 98: if(lj != null)
行 99: {
这个错误,百思不得其解,请大虾指教!
private void dg_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if ( ( e.Item.ItemType != ListItemType.Header ) && ( e.Item.ItemType != ListItemType.Footer ))
{
HyperLink lj= ( HyperLink ) e.Item.Cells[1].Controls[0];
if(lj != null)
{
if(this.ShowNum>0)
{
e.Item.Cells[1].ToolTip=lj.Text;
if(lj.Text.Length>this.ShowNum)
{
e.Item.Cells[1].Text="<a href=" + lj.NavigateUrl + "&table=" + table + ">" + lj.Text.Substring(0,ShowNum) + "..." + "</a>";
}
else
{
e.Item.Cells[1].Text="<a href=" + lj.NavigateUrl + "&table=" + table + ">" + lj.Text + "</a>";
}
}
else
{
e.Item.Cells[1].Text="<a href=" + lj.NavigateUrl + "&table=" + table + ">" + lj.Text + "</a>";
}
}
if(e.Item.ItemIndex!=-1)
{
HyperLink hk=(HyperLink)e.Item.FindControl("HyperLink1");
if(hk != null)
hk.NavigateUrl="input.aspx?id=" + this.dg.DataKeys[e.Item.ItemIndex].ToString();
}
}
}但是,显示出来的时候,在分页里,第一页没问题,但是只要点击其它页就出现如下错误:指定的参数已超出有效值的范围。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: index源错误: 行 95: if ( ( e.Item.ItemType != ListItemType.Header ) && ( e.Item.ItemType != ListItemType.Footer ))
行 96: {
行 97: HyperLink lj= ( HyperLink ) e.Item.Cells[1].Controls[0];
行 98: if(lj != null)
行 99: {
这个错误,百思不得其解,请大虾指教!
解决方案 »
- asp.net普通控件控件和移动控件的不同
- 无法切换视图: 验证 (Internet Explorer 6): 元素“link”不能嵌套在元素“Div”中。
- Fill: SelectCommand.Connection 属性尚未初始化。求救啊,弄了好久啊
- 请教一个DataList中ItemTemplate的问题
- 求一条正确的SQL语句
- 动态加载模块的问题,高手请看!
- 动态加载服务器控件的问题
- 如何读取泛型数据的信息。
- 怎么控制GridView中某个字段字符串长度限制在20个全角字符内
- 如何在一页面关闭时,将某个特定的Session从系统中清除
- 有用过Infragistics的.UltraWebGrid的吗?
- 创建控件时出错--未知的服务器标记
<asp:TemplateColumn>
<ItemStyle HorizontalAlign="Left" Wrap="true"></ItemStyle>
<ItemTemplate>
<asp:Label runat="server" Text='<%# GetDemand(DataBinder.Eval(Container, "DataItem.demand").ToString())%>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
2.后台
protected string GetDemand(string strDemand)
{
string subDemand = strDemand;
//取前10个字串(如果需求长度小于十个,则取原串) if(subDemand.Length > 10)
{
subDemand = subDemand.Substring(0,10) + "...";
}
string titleDemand = strDemand.Replace("<br>","\r\n").Replace(" "," ");
string HtmlTitle = "<A title=\"" + titleDemand + "\" >" + subDemand + "</A>"; return HtmlTitle;
}
多加一个条件试试
{
}
{
}
这样应该没问题的
ChengKing(bantamweight)介绍的方法,可能不大合适我用,我这里有太多的DataGrid,如果这样做的话,效率太低!
ghchen()和mathsword(梦在流浪)的方法试过了,还是出错!
1、第一行
2、最后一行按照你的写法,最后一行没有数据;
第一行和最后一行的时候,e.Item.ItemIndex也为-1
if(e.Item.ItemIndex!=-1)
{
HyperLink hk=(HyperLink)e.Item.FindControl("HyperLink1");
if(hk != null)
hk.NavigateUrl="input.aspx?id=" + this.dg.DataKeys[e.Item.ItemIndex].ToString();
}
if ( ( e.Item.ItemType != ListItemType.Header ) && ( e.Item.ItemType != ListItemType.Footer )&& (e.Item.Cells[1].Controls.Count >0))
应该没有问题了
并对帮助过我的兄弟姐妹表示感谢!