2011-08-08 10 views
0

私は列が自動生成されるグリッドビューを持っています。バインディングデータテーブルには、ビット(ブール)列があります。データがバインドされると、ビット列の代わりにチェックボックスフィールドが生成されます。自動生成されたチェックボックスfeildをラジオボタンの代わりに自動生成列のグリッド表示に置き換えます。

要件

チェックボックスフィールドは、上記のビット列に基づいて承認や拒否などの2つのオプションで、ラジオボタンリストを交換する必要があります。

制約

グリッドビュー内の列の数は、フィルタが選択基づいて変化するように、私は、偽のように自動生成された列を設定することはできません。しかし、それはビット列を持つたびに。

答えて

0

Googleに関する長い研究の末、私は解決策を得ましたが、納得のいく解決策には見えません。

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    int Cellix = -1; 
    Cellix = GetBooleanCellIndex(e.Row); 
    if (Cellix != -1) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      RadioButtonList rbnl = new RadioButtonList(); 
      rbnl.ID = "rbn_Status"; 
      rbnl.RepeatDirection = RepeatDirection.Horizontal; 
      rbnl.Items.Add(new ListItem("Open", "0")); 
      rbnl.Items.Add(new ListItem("Close", "1")); 
      rbnl.SelectedValue = Convert.ToInt16(DataBinder.Eval(e.Row.DataItem, "status")).ToString(); 
      e.Row.Cells[Cellix].Controls.Clear(); 
      e.Row.Cells[Cellix].Controls.Add(rbnl); 
     } 
    } 
} 

private int GetBooleanCellIndex(GridViewRow gvrow) 
{ 
    int CellIndex = 0; 
    Boolean dummy = true; 
    foreach (DataControlFieldCell cell in gvrow.Cells) 
    { 
     AutoGeneratedField At = null; 
     if (cell.ContainingField.GetType().Name == "AutoGeneratedField") 
     { 
      At = (AutoGeneratedField)cell.ContainingField; 
      if (At.DataType.Name == dummy.GetType().Name) 
       return CellIndex; 
      CellIndex++; 
     } 
    } 
    return -1; 
} 

だから私は皆さんからさらなる洗練を期待しています。

0

独自のCustomeField/Custom GridView Columnクラスを作成する必要があります。ネット上で "GridView Custom field"で検索すると、多くの例が得られます。 AutoGenerateColumnsはそれと共に動作します。 1つはコードビハインドでロットコードを書く必要があります:)

+0

は非常に長い処理に見えます。 Rowデータバインドやその他のグリッドビューイベントでチェックボックスコントロールを検索して置き換えることができますか? – suryakiran

0

自動生成列でテンプレートフィールドを使用できます。

関連する問題