0

我有一个自动生成列的网格视图。绑定数据表将有一个 Bit(Boolean) 列。现在,当绑定数据时,会生成复选框字段来代替位列。

要求

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

约束

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

4

3 回答 3

0

您需要编写自己的 CustomeField/Custom GridView Column 类。如果你在网上用“GridView Custom field”搜索,你会得到很多例子。AutoGenerateColumns 与它一起工作。需要在代码隐藏中编写很多代码:)

于 2011-08-08T14:52:59.970 回答
0

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

于 2011-08-08T14:58:43.453 回答
0

经过对谷歌的长期研究。我得到了解决方案,但它看起来不是一个令人信服的解决方案。

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 回答