замена автоматически сгенерированного флажка feild с переключателем в автоматически сгенерированных столбцах Grid View - PullRequest
0 голосов
/ 08 августа 2011

У меня есть сетка, для которой столбцы генерируются автоматически. Таблица данных привязки будет иметь битовый (логический) столбец. Теперь, когда данные связаны, вместо битового столбца создается поле флажка.

Требование

Поля флажков должны быть заменены списком переключателей с двумя вариантами: Утверждено и Отклонено на основе битового столбца, упомянутого выше.

Ограничение

Я не могу установить для автоматически сгенерированных столбцов значение false, поскольку количество столбцов в виде сетки будет зависеть от выбранного фильтра. Но каждый раз, когда у него есть битовый столбец.

Ответы [ 3 ]

0 голосов
/ 08 августа 2011

Вы можете использовать поле шаблона с автоматически генерируемыми столбцами.

0 голосов
/ 09 августа 2011

После долгих исследований в 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;
}

Так что я жду от вас, ребята, дальнейших улучшений.

0 голосов
/ 08 августа 2011

Вам необходимо написать свой собственный класс столбцов CustomeField / Custom GridView. Если вы выполните поиск с помощью «Пользовательского поля GridView» по сети, вы получите много примеров. AutoGenerateColumns работает с ним. Нужно написать код лота в codebehind:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...