2017-02-22 30 views
3

プログラムでGridViewに追加のクラスを追加したいとします。私は次のコードを使用してこれを行うことができることを知っています:RowDataBoundの2番目のクラスをgridviewの行に追加する

public void RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    DataRow row = ((DataRowView)e.Row.DataItem).Row; 
    if (!row.Field<Boolean>("IsActive")) 
    { 
     e.Row.Attributes["class"] += "InActive"; 
    } 
} 

そしてそれは問題ありません。クラス「のisActiveは、」私は、このHTMLで終わる行を交互に、しかし、追加されます。

<tr class="gvAlternatingStyle" class="InActive" 
    onmouseover="gvMouseOver(this)" 
    onmouseout="gvMouseOut(this)" style="cursor:pointer;"> 

二つのクラス定義は、私が欲しいものではありません。私はこのようなものを持つことを望んでいるでしょう:

<tr class="gvAlternatingStyle InActive" 
    onmouseover="gvMouseOver(this)" 
    onmouseout="gvMouseOut(this)" style="cursor:pointer;"> 

これはもちろん、より有効です。

このhtmlをどこで調整するかわかりません。 OnPreRender()でおそらくどこに見えません。誰も私にポインタを与えることができますか?

答えて

1

):

public void RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
      DataRow row = ((DataRowView)e.Row.DataItem).Row; 
      if (!row.Field<Boolean>("IsActive"))    { 
       e.Row.Attributes["class"] += "InActive";     
    } 


    protected void PreRender(object sender, EventArgs e) 
    { 
     foreach(GridViewRow row in GridView1.Rows) 
     { 
      if ((row.Attributes["class"] == "InActive")&& 
       (row.RowState == DataControlRowState.Alternate)){ 
       row.RowState = DataControlRowState.Normal; 
       row.Attributes["class"] = "gvAlternatingStyle InActive"; 

      } 

     } 
    } 
1

自分でAlternatingRowStyle-CssClassを世話し、必要に応じて追加のクラスを追加することができます。もちろん、GridViewヘッダーから削除する必要があります。私は上記とOnPreRender(の組み合わせでこれを達成するためにどのように働いたこれでしばらくmuddling後とVDWWDからの助けを借りて

string AlternatingRowStyleCssClass; 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //check if the row is a datarow 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string myClass = string.Empty; 

     //get the AlternatingRowStyle-CssClass for reference into a variable and delete from the gridview itself 
     if (e.Row.RowIndex == 0) 
     { 
      AlternatingRowStyleCssClass = GridView1.AlternatingRowStyle.CssClass; 
      GridView1.AlternatingRowStyle.CssClass = ""; 
     } 

     //check if the row is alternate, if so set the alternating class 
     if (e.Row.RowIndex % 2 == 1) 
     { 
      myClass = AlternatingRowStyleCssClass; 
     } 

     //check if you need to add the extra class 
     DataRow row = ((DataRowView)e.Row.DataItem).Row; 
     if (!row.Field<Boolean>("IsActive")) 
     { 
      myClass += " Inactive"; 
     } 

     //add all the classes to the row 
     e.Row.Attributes["class"] = myClass.Trim(); 
    } 

    //add the class to the gridview again (maybe relevant for postback) 
    if (e.Row.RowType == DataControlRowType.Footer) 
    { 
     GridView1.AlternatingRowStyle.CssClass = AlternatingRowStyleCssClass; 
    } 
} 
+0

私は実際にちょうど似たような(発生を実装私はこの質問をタイプしたので私に)私はまだ手で交互の様式をプログラムすることなくそれをする方法があったかどうか見るために興味があった。早速のご返事ありがとうございます!!誰も上記の直接的な解決策が出てこない場合は、私はあなたの答えを答えとしてマークします。 –

+1

'AlternatingRowStyle-CssClass'で定義されたクラスは、後で' OnRowDataBound'イベントで何が起こるかと考えられます。私は 'e.Row.Attributes.Remove(" class ");で簡単なテストを行い、新しいクラスをもう一度追加しましたが、うまくいきませんでしたが、クラスはまだ追加されました。 – VDWWD

+0

そうです、私は同意します。まだ実験中。私はOnPreRenderでそれを見ましたが、クラスはまだありません。 –

関連する問題