我有一个自动生成列的网格视图。绑定数据表将有一个 Bit(Boolean) 列。现在,当绑定数据时,会生成复选框字段来代替位列。
要求
复选框字段需要替换为单选按钮列表,根据上面提到的位列有批准和拒绝两个选项。
约束
我无法将自动生成的列设置为 false,因为网格视图中的列数会根据选择的过滤器而有所不同。但每次它都有位列。
我有一个自动生成列的网格视图。绑定数据表将有一个 Bit(Boolean) 列。现在,当绑定数据时,会生成复选框字段来代替位列。
要求
复选框字段需要替换为单选按钮列表,根据上面提到的位列有批准和拒绝两个选项。
约束
我无法将自动生成的列设置为 false,因为网格视图中的列数会根据选择的过滤器而有所不同。但每次它都有位列。
您需要编写自己的 CustomeField/Custom GridView Column 类。如果你在网上用“GridView Custom field”搜索,你会得到很多例子。AutoGenerateColumns 与它一起工作。需要在代码隐藏中编写很多代码:)
您可以将模板字段与自动生成列一起使用。
经过对谷歌的长期研究。我得到了解决方案,但它看起来不是一个令人信服的解决方案。
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;
}
所以我期待你们的进一步改进。