【发布时间】:2017-11-28 08:58:14
【问题描述】:
我正在使用带有 BoundFields 和 TemplatedFields 的 asp gridview。
<asp:GridView ID="RepairGrid" runat="server" CssClass="subitem w100p"
AutoGenerateColumns="False"
OnRowCommand="RepairGrid_SelectedIndexChanged" OnRowDataBound="RepairGrid_RowDataBound"
AllowSorting="True" OnSorting="SortGrid">
<RowStyle CssClass="itemRowStyle"/>
<AlternatingRowStyle CssClass="alternatingItemRowStyle"/>
<HeaderStyle CssClass="headerRowStyle"/>
<Columns>
<asp:TemplateField HeaderText="PDF" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="ColumnPDF" HeaderStyle-CssClass="headerFieldStyle">
<ItemTemplate>
<asp:ImageButton ID="btnExportPDF" runat="server" CommandArgument='<%# Eval("RepairId") %>'
CommandName="ExportPDF" ImageUrl='<%# "~/App_Themes/" + Page.Theme + "/icons/16/icon_pdf.png" %>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="RepairId" SortExpression="RepairId" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="ColumnRepairId" HeaderStyle-CssClass="headerFieldStyle" >
<ItemTemplate>
<asp:LinkButton ID="lnkRepairId" CommandArgument='<%# Eval("RepairId") %>' CommandName="Redirect"
runat="server" Text='<%# Eval("RepairId") %>'/>
<asp:Label ID="lblRepairId" runat="server" Text='<%# Eval("RepairId") %>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ProblemCategory" SortExpression="InternalDescription" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="repairItemText" HeaderStyle-CssClass="headerFieldStyle">
<ItemTemplate>
<asp:LinkButton ID="lnkProblemCategory" CommandArgument='<%# Eval("RepairId") %>' CommandName="Redirect"
runat="server"/>
<asp:Label ID="lblProblemCategory" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CreateDate" HeaderText="Status" SortExpression="CreateDate" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="ColumnCreateDate" HeaderStyle-CssClass="headerFieldStyle"/>
<asp:BoundField DataField="CreateUser" HeaderText="Status" SortExpression="CreateUser" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="ColumnCreateUser" HeaderStyle-CssClass="headerFieldStyle"/>
<asp:BoundField DataField="ChangeDate" HeaderText="Status" SortExpression="ChangeDate" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="ColumnChangeDate" HeaderStyle-CssClass="headerFieldStyle"/>
<asp:BoundField DataField="ChangeUser" HeaderText="Status" SortExpression="ChangeUser" ItemStyle-CssClass="itemFieldStyle"
meta:resourcekey="ColumnChangeUser" HeaderStyle-CssClass="headerFieldStyle"/>
</Columns>
</asp:GridView>
我已经成功地对 Boundfields 和 RepairId 模板字段进行了正确排序,但是由于我的 TemplatedField ProblemCategory 在 DataSource 中没有它的文本,因此会像这样填充
foreach (RepairDataSet.tms_v_Repair_RepairItemRow row in tblCategories)
{
RepairDataSet.tms_RepairItemDataTable repItemTbl = new RepairDataSet.tms_RepairItemDataTable();
repItemTbl = repairBo.GetRepairItem(row.RepairItemId);
if (repItemTbl.Count > 0)
{
lnkProblemCategory.Text += "<br />" + repItemTbl[0].TextKey;
}
else
{
lnkProblemCategory.Text += "<br />";
}
}
在 Grid_SelectedIndexChanged 中,我为排序事件 args 做了特殊情况,在女巫中我定义了 DataSource,因为它应该是。
是否有可能通过其文本而不是其在 DB 中的值对 TemplatedField 进行排序?
【问题讨论】: