Как привязать новый datatable к gridview, у которого уже есть старый datatable

У меня есть gridview, который привязан к datatable во время выполнения. В соответствии с выбором пользователя столбцы таблицы данных могут измениться, и тогда мне нужно привязать таблицу данных к тому же представлению сетки. Если пользователь это сделает, система выйдет из строя, потому что gridview ищет те же имена столбцов.

Как я могу очистить всю сетку и снова и снова привязать новую таблицу данных?

вот как я связываю данные. каждый раз имена столбцов меняются

DataTable result = dt_to_result_bolge_kiyaslama(dt);
gv_kiyaslama.DataSource = result;
gv_kiyaslama.DataBind();

person Arif YILMAZ    schedule 12.03.2014    source источник
comment
Самым простым было бы просто повторно инициализировать gridview, или я что-то неправильно понимаю?   -  person Lukas Häfliger    schedule 12.03.2014
comment
Используете ли вы автоматически сгенерированные столбцы в своей сетке или нет?   -  person Andrew Backes    schedule 12.03.2014
comment
Вы можете показать мне свой код?   -  person Pragnesh Khalas    schedule 12.03.2014


Ответы (1)


Возможно, вы ищете, как повторно генерировать столбцы Grid View во время выполнения. Эта статья CodeProject.com может быть билетом: Как динамически создавать столбцы в виде сетки.

Пример кода ASP:

<asp:GridView ID="MyGrid" runat="server" AutoGenerateColumns="false">
    <Columns />
</asp:GridView>

И пример метода C #:

public void RegenerateColumns(GridView grid, DataTable data, IDictionary<string, string> columnText)
{
    grid.Columns.Clear();

    foreach (DataColumn col in data.Columns)
    {
        grid.Columns.Add(new BoundField()
        {
            DataField = col.ColumnName,
            HeaderText = columnText.ContainsKey(col.ColumnName)
                ? columnText[col.ColumnName]
                : col.ColumnName
        });
    }
}

Теперь использовать:

DataTable table = new DataTable();
table.Columns.Add(...); // add "NAME" column
table.Columns.Add(...); // add "DESCRIPTION" column

// Create mapping of column names to text visible to the user
Dictionary<string, string> cols = new Dictionary<string, string>()
{
    { "NAME", "Name" },
    { "DESCRIPTION", "Description" }
};

// Call method:
RegenerateColumns(MyGrid, table, cols);

// Rebind the data to the grid
MyGrid.DataSource = table;
MyGrid.DataBind();
person Greg Burghardt    schedule 12.03.2014
comment
это объясняет, как привязать сетку динамически. Я могу сделать это успешно, но если я изменю имя столбца и снова привяжу его к той же сетке, он выйдет из строя, потому что он ищет старые имена столбцов - person Arif YILMAZ; 12.03.2014
comment
Эта статья объясняет, чего вы хотите. Я обновлю свой ответ. - person Greg Burghardt; 12.03.2014
comment
это не лучший способ. Я с нетерпением жду возможности найти такую ​​функцию, как clear () - person Arif YILMAZ; 12.03.2014
comment
Есть clear функция: GridView.Columns.Clear() - Очищает столбцы в сетке. - person Greg Burghardt; 12.03.2014
comment
Я знаю, но если я сделаю clear (), он не принимает вторые столбцы данных - person Arif YILMAZ; 12.03.2014
comment
Вы читали сообщение в блоге, на которое я ссылался, или просматривали опубликованный мной пример кода? После очистки столбцов вы должны снова создать их программным способом. - person Greg Burghardt; 12.03.2014