Ron*_*del 5 c# asp.net gridview
我有一个asp:GridView声明如下:
<asp:GridView runat="server" id="dg_myprojects" AllowSorting="true" AutoGenerateColumns="false" Width="900px" CssClass="Grid" OnSorting="TaskGridView_SortingMine" OnRowCommand="MyProjectList_RowCommand" DataKeyNames="project_id" OnRowDataBound="Ds_my_projects_RowDataBound">
<AlternatingRowStyle CssClass="alternateRow" />
<HeaderStyle CssClass="GridHeader" />
<Columns>
<asp:BoundField DataField="project_name" HeaderText="Project Name" SortExpression="project_name"/>
<asp:BoundField DataField="description" HeaderText="Description" SortExpression="description" ItemStyle-HorizontalAlign="Left" />
<asp:BoundField DataField="role" HeaderText="Role" SortExpression="role" />
<asp:BoundField DataField="start_date" HeaderText="Start Date" SortExpression="start_date" DataFormatString="{0:d}"/>
<asp:BoundField DataField="end_date" HeaderText="End Date" SortExpression="end_date" DataFormatString="{0:d}" />
<asp:BoundField DataField="client" HeaderText="Client" SortExpression="client" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="DeleteButton" CommandArgument='<%# Eval("project_id") %>' CommandName="Remove" runat="server">Remove</asp:LinkButton>
</ItemTemplate></asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="project_id" DataNavigateUrlFormatString="EditProject.aspx?pID={0}" Text="Edit"/>
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
我的问题是100%美学.为长描述而发生的自动换行使表格看起来很俗气.我想用长描述做的是当描述太长时有一个省略号(...)
很长的描述等等......
我找不到内置的方法,所以我决定尝试实现OnRowDataBoundGridView的这个.
protected void Ds_my_projects_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataRow curRow = ((DataRowView)e.Row.DataItem).Row;
if (curRow["Description"].ToString().Length > 200)
curRow["Description"] = curRow["Description"].ToString().Substring(0, 200) + "...";
}
Run Code Online (Sandbox Code Playgroud)
我在第一行遇到运行时异常,因为Object引用未设置为对象的实例.
我在这做错了什么?有没有更简单的方法来完成我想要做的事情?
CAb*_*ott 16
您可以使用css并将其添加到您的Gridcss类来处理它:
.Grid {
table-layout:fixed;
width:100%;
}
.Grid .Shorter {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Run Code Online (Sandbox Code Playgroud)
更新:我修改了上面的类,以便您可以通过使用ItemStyle-CssClass属性来影响单个列,如下所示:
<asp:BoundField DataField="description" HeaderText="Description"
SortExpression="description" ItemStyle-CssClass="Shorter" />
Run Code Online (Sandbox Code Playgroud)
我要做的是创建一个可以缩短字符串的Extension类.静态类将具有类似以下方法:
public static string Shorten(this string name, int chars)
{
if (name.ToCharArray().Count() > chars)
{
return name.Substring(0, chars) + "...";
}
else return name;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将BoundFields用作TemplateFields,如下所示:
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblDesc" Text="<%# Eval("description").ToString().Shorten(20) %>" />
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
关于这一点的好处是你现在可以在Shorten()任何地方使用该方法.
| 归档时间: |
|
| 查看次数: |
25613 次 |
| 最近记录: |