使用自动生成的列网格视图中的单选按钮替换自动生成的复选框字段

时间:2011-08-08 14:21:30

标签: asp.net gridview autogeneratecolumn datafield

我有一个Grid视图,可以自动生成列。绑定数据表将具有位(布尔)列。现在,当绑定数据时,将生成复选框字段来代替位列。

要求

复选框字段需要替换为单选按钮列表,根据上述位列,有两个选项为已批准和已拒绝。

约束

我无法将自动生成的列设置为false,因为网格视图中的列数将根据所选的过滤器而有所不同。但每次它都有位列。

3 个答案:

答案 0 :(得分:0)

您需要编写自己的CustomeField / Custom GridView Column类。如果您通过网络搜索“GridView自定义字段”,您将获得许多示例。 AutoGenerateColumns可以使用它。需要在codebehind中编写批量代码:)

答案 1 :(得分:0)

您可以将模板字段与自动生成列结合使用。

答案 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;
}

所以我期待你们的进一步改进。