0

列が自動生成されるグリッド ビューがあります。バインディング データ テーブルには、Bit(Boolean) 列が含まれます。データがバインドされると、ビット列の代わりにチェックボックス フィールドが生成されます。

要件

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

制約

グリッド ビューの列の数は、選択したフィルターによって異なるため、自動生成された列を false に設定することはできません。しかし、毎回ビット列があります。

4

3 に答える 3

0

独自の CustomeField/Custom GridView 列クラスを作成する必要があります。ネットで「GridViewカスタムフィールド」で検索すると、たくさんの例が出てきます。AutoGenerateColumns はそれで動作します。コードビハインドで多くのコードを書く必要があります:)

于 2011-08-08T14:52:59.970 に答える
0

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

于 2011-08-08T14:58:43.453 に答える
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;
}

ですから、皆さんからのさらなる洗練を期待しています。

于 2011-08-09T09:12:34.003 に答える