Увеличение размера столбца кнопки в представлении данных - PullRequest
0 голосов
/ 30 августа 2011

Я заполнил сетку данных, используя следующий метод, и добавил столбец кнопки:

private void populatedatagridview()
{
    categorieslist();
    productgridview.RowTemplate.Height = 130;

    var productsbycount = axe.products.GroupBy(x => x.product_Id).Select(a => new
    {
        productid = a.Key,
        productnam = a.FirstOrDefault().product_Name,
        productimage = a.FirstOrDefault().product_Image,
        productdescr = a.FirstOrDefault().product_Description,
        stockavailable = a.LongCount(),
        productprice = a.FirstOrDefault().product_Price
    });

    productbindingsource.DataSource = productsbycount;
    productgridview.DataSource = productbindingsource;              
    DataGridViewButtonColumn column = new DataGridViewButtonColumn();
    productgridview.Columns.Add(column);
    column.FlatStyle = FlatStyle.System;
    column.DefaultCellStyle.ForeColor = Color.ForestGreen;          
    column.DefaultCellStyle.Padding = new Padding(10,48,10,48);
    column.Text = "Buy";
    column.HeaderText = "Buy";
    column.UseColumnTextForButtonValue = true;
    column.Name = "btnbuy";

    productgridview.Columns[0].Visible = false;

    for (int i = 0 ; i < productgridview.Columns.Count; i++)
        if (productgridview.Columns[i] is DataGridViewImageColumn)
        {
            ((DataGridViewImageColumn)productgridview.Columns[i]).ImageLayout = DataGridViewImageCellLayout.Stretch;
            break;
        }

}

Моя проблема заключается в том, что всякий раз, когда я вызываю эту функцию, в представлении таблицы данных добавляется еще один столбец кнопок, поэтому автоматически увеличивается количество столбцов кнопок.

И у меня есть поле со списком, я хочу заполнить представление таблицы данных, зависит от текста поля со списком. В то же время я также должен вызвать эту функцию.

К сожалению, он автоматически добавляет столбец кнопки снова и снова при каждом вызове этой функции. Кто-нибудь, пожалуйста, помогите в этом?

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Изменить этот блок:

        DataGridViewButtonColumn column = new DataGridViewButtonColumn();
        productgridview.Columns.Add(column);
        column.FlatStyle = FlatStyle.System;
        column.DefaultCellStyle.ForeColor = Color.ForestGreen;
        column.DefaultCellStyle.Padding = new Padding(10, 48, 10, 48);
        column.Text = "Buy";
        column.HeaderText = "Buy";
        column.UseColumnTextForButtonValue = true;
        column.Name = "btnbuy";

на:

if (productgridview.Columns["btnbuy"] == null)
{
        DataGridViewButtonColumn column = new DataGridViewButtonColumn();
        productgridview.Columns.Add(column);
        column.FlatStyle = FlatStyle.System;
        column.DefaultCellStyle.ForeColor = Color.ForestGreen;
        column.DefaultCellStyle.Padding = new Padding(10, 48, 10, 48);
        column.Text = "Buy";
        column.HeaderText = "Buy";
        column.UseColumnTextForButtonValue = true;
        column.Name = "btnbuy";
}
0 голосов
/ 30 августа 2011

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

productgridview.Columns.Add(column); 

Я бы отделил код, который форматирует ваш DataGridView от кода, который связывает его с данными. Запустите код, который форматирует сетку только один раз, и запустите код, который привязывает данные, когда это необходимо.

Ваш метод populatedatagridview действительно выполняет две вещи: запрашивает источник данных и привязывает результат запроса к вашей сетке, и изменяет внешний вид вашего DataGridView, добавляя столбец и устанавливая свойство ImageLayout некоторых столбцов.

Я бы удалил весь код, который изменяет внешний вид вашей сетки, в новый метод и вызвал бы его только один раз, возможно, при загрузке формы. Это оставляет populatedatagridview ответственным только за заполнение вашего DataGridView.

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