Замена автоматически сгенерированного флажка feild с переключателем в автоматически сгенерированных столбцах Grid View
У меня есть вид сетки, для которого столбцы создаются автоматически. Таблица данных привязки будет иметь битовый (логический) столбец. Теперь, когда данные связаны, вместо битового столбца создается поле флажка.
требование
Поля флажков должны быть заменены списком переключателей с двумя вариантами: Утверждено и Отклонено на основе битового столбца, упомянутого выше.
скованность
Я не могу установить автоматически сгенерированные столбцы как ложные, так как количество столбцов в виде сетки будет зависеть от выбранного фильтра. Но каждый раз у него есть битовый столбец.
3 ответа
После долгих исследований в 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;
}
Так что я жду от вас дальнейших улучшений, ребята.
Вы можете использовать поле шаблона с автоматически генерировать столбцы.
Вам нужно написать свой собственный класс столбцов CustomeField/Custom GridView. Если вы выполните поиск с помощью "Пользовательского поля GridView" по сети, вы получите много примеров. AutoGenerateColumns работает с ним. Нужно написать много кода в коде позади:)