我有一个Grid视图,可以自动生成列。绑定数据表将具有位(布尔)列。现在,当绑定数据时,将生成复选框字段来代替位列。
要求
复选框字段需要替换为单选按钮列表,根据上述位列,有两个选项为已批准和已拒绝。
约束
我无法将自动生成的列设置为false,因为网格视图中的列数将根据所选的过滤器而有所不同。但每次它都有位列。
答案 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;
}
所以我期待你们的进一步改进。