2017-09-29 6 views
1

GridView内の10番目のBoundFieldの後ろのCSSクラスを変更したいのですが、DataField(インデックスとして文字列を使用)で検索したいと思います。 I上記のコードでDataFieldでGridView内のBoundFieldを見つけるにはどうすればよいですか?

protected void gdDeliveryDates_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string DeliveryDue = DataBinder.Eval(e.Row.DataItem, "DeliveryDue").ToString(); 
     ((LinkButton) e.Row.FindControl("PostDelivery")).Enabled = !String.IsNullOrEmpty(DeliveryDue); 

     //e.Row.Cells[9].CssClass= "badge"; 
    } 
} 

列番号(上記指定されている、すなわち、列9)は非常に揮発性であるので、私には受け入れられている、私はこれまでに見つけた唯一の解決策をコメントしています。 DataField(文字列、この場合は"MailCount")の列を、グリッド宣言の先に表示されているように見つけることをお勧めします。以下は私のグリッドは次のようになります。

<asp:GridView ID="gdDeliveryDates" runat="server" AllowPaging="False" AllowSorting="True" DataSourceID="odsDeliveryDates" AutoGenerateColumns="False" CssClass="table table-striped table-bordered table-hover" OnRowCommand="gdDeliveryDates_RowCommand" OnSelectedIndexChanged="gdDeliveryDates_SelectedIndexChanged" DataKeyNames="PackageOfferedID, PackageID, PostageID, PackageNumber, PackageTitle, PostageName, Section, PostageStart, PostageEnd, DeliveryDue, LName, MailCount, Location" OnRowDataBound="gdDeliveryDates_RowDataBound" > 
    <Columns> 

     <asp:BoundField DataField="PackageID" HeaderText="PackageID" Visible="False" ReadOnly="True" SortExpression="PackageID" /> 
     <asp:BoundField DataField="PackageOfferedID" HeaderText="PackageOfferedID" Visible="False" ReadOnly="True" SortExpression="PackageOfferedID" /> 
     <asp:BoundField DataField="PostageID" HeaderText="PostageID" Visible="False" ReadOnly="True" SortExpression="PostageID" /> 

     <asp:BoundField DataField="PackageNumber" HeaderText="Package" Visible="True" ReadOnly="True" SortExpression="PackageNumber" HeaderStyle-CssClass="visible-xs visible-sm visible-md visible-lg" ItemStyle-CssClass="visible-xs visible-sm visible-md visible-lg" /> 

     <asp:BoundField DataField="PostageName" HeaderText="Postage" ReadOnly="True" SortExpression="PostageName" HeaderStyle-CssClass="visible-sm visible-md visible-lg" ItemStyle-CssClass="visible-sm visible-md visible-lg"/> 
     <asp:BoundField DataField="Section" HeaderText="Section" ReadOnly="True" SortExpression="Section" HeaderStyle-CssClass="visible-xs visible-sm visible-md visible-lg" ItemStyle-CssClass="visible-xs visible-sm visible-md visible-lg" /> 

     <asp:BoundField DataField="PostageStartDate" HeaderText="Start Date" ReadOnly="True" SortExpression="PostageStartDate" DataFormatString="{0:MM/dd/yyyy}" HeaderStyle-CssClass="visible-md visible-lg" ItemStyle-CssClass="visible-md visible-lg" /> 
     <asp:BoundField DataField="PostageEndDate" HeaderText="End Date" ReadOnly="True" SortExpression="PostageEndDate" DataFormatString="{0:MM/dd/yyyy}" HeaderStyle-CssClass="visible-md visible-lg" ItemStyle-CssClass="visible-md visible-lg" /> 
     <asp:BoundField DataField="DeliveryDueDate" HeaderText="Delivery Due" ReadOnly="True" SortExpression="DeliveryDueDate" DataFormatString="{0:MM/dd/yyyy}" HeaderStyle-CssClass="visible-xs visible-sm visible-md visible-lg" ItemStyle-CssClass="visible-xs visible-sm visible-md visible-lg" /> 

     <asp:BoundField DataField="MailCount" HeaderText="#" Visible="True" ReadOnly="True" SortExpression="MailCount" HeaderStyle-CssClass="visible-lg" ItemStyle-CssClass="visible-lg" /> 
     <asp:TemplateField ShowHeader="False"> 
      <ItemTemplate> 
       <asp:LinkButton ID="PostDelivery" runat="server" CausesValidation="false" CommandName="Add" 
          Text="Post Delivery" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' 
          CssClass="buttonLayout" /> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:BoundField DataField="LName" HeaderText="LName" Visible="False" ReadOnly="True" SortExpression="LName" /> 

     <asp:BoundField DataField="Location" HeaderText="Location" Visible="False" ReadOnly="True" SortExpression="Location" /> 
    </Columns> 
</asp:GridView> 

答えて

1

これは不可能ですが、あなたは、このメソッド試すことができます。

public int FindIndexByDataField(this GridView gv, string datafieldname) 
{ 
    int index = -1, cnum = 0; 
    foreach (DataControlField col in gv.Columns) 
    { 
     if (col is BoundField) 
     { 
      BoundField coll = (BoundField)gv.Columns[cnum]; 
      if (coll.DataField == datafieldname) 
      { 
       index = cnum; 
       break; 
      } 
     } 
     cnum++; 
    } 
    return index; 
} 

をそして、このような方法で上記の呼び出し:

e.Row.Cells[FindIndexByDataField("MailCount")].CssClass= "badge"; 
+0

これは素晴らしかったです! GridViewで使用されているヘッダータイトルの代わりに、データフィールドの列名を参照したいからです。 public static int GetIndexByName(GridView gv、string dataFieldName) { \t intインデックス= -1、cnum = 0; \t foreachの(gv.ColumnsにおけるたDataControlField COL) \t {\t \t IF(COLがBoundFieldある) \t \t { \t \t \t BoundFieldコル=(BoundField)gv.Columns [CNUM]。 \t \t \t(coll.DataField == dataFieldName)場合 \t \t \t { \t \t \t \tインデックス= CNUM。 \t \t \t \t break; \t \t \t} \t \t} \t \t CNUM ++。 \t} \t return index; } – ShieldOfSalvation

+0

DataField、HeaderTextまたはSortExpressionのいずれかを使用して、DataFieldを更新しました。 – AsifAli72090

関連する問題