2017-11-28 5 views
0

私はBoundFieldsとTemplatedFieldsでaspグリッドビューを使用しています。aspネットグリッドビューテキストでソートされたフィールドをソート

<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 template宣言フィールドを並べ替えるために管理しているが、私のTemplatedField ProblemCategoryは、データソース内のテキストを持っていないとGrid_SelectedIndexChangedでこの

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 />"; 
    } 
} 

のように記入されますので、私が持っていますソートイベントのargsのために特殊なケースを行いました。私は、データソースを定義する必要があります。

TemplatedFieldをテキストで並べ替える可能性はありますか?その値はDBで並べ替えることはできませんか?

答えて

0

策1:Sort Menually

<asp:TemplateField> 
      <HeaderTemplate> 
       <asp:LinkButton ID="LinkButtonEmpName" runat="server" Text="Employee Name" CommandName="Sort" CommandArgument="Employees"> 
       </asp:LinkButton> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:Label ID="LabelEmployee" runat="server" Text='<%# Bind("Employees") %>'/> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="TextBoxEmployee" runat="server"/> 
      </FooterTemplate> 
</asp:TemplateField > 

ソリューション2 Sort By Columnd

<asp:TemplateField SortExpression="Status"> 
    <HeaderTemplate> 
     <asp:LinkButton ID="lnkSort" runat="server" Text="Status" CommandName="Sort" CommandArgument="Status" /> 
    </HeaderTemplate> 
</asp:TemplateField> 

protected void grd_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName.Equals("Sort")) 
    { 
     FilterExpression = e.CommandArgument.ToString() + " LIKE '%" + txtCaseNumber.Text + "%'"; 
     BindGridView(); 
    } 
} 

ソリューション3 Sort with custom templates

<asp:TemplateField HeaderText="Category" SortExpression="Category"> 
    <ItemTemplate>A value</ItemTemplate> 
</asp:TemplateField> 
+0

こんにちは、私はあなたのソリューション2がベストだと思いますが、私はないですこのFilterExpressionクラスの内容を確認してください。あなたは説明できますか? –

+0

これはオプションです。サーバ側からの結果をフィルタリングする条件です。 –

関連する問題