DataGridView Row Tag - PullRequest
       4

DataGridView Row Tag

1 голос
/ 26 сентября 2019

У меня есть Datagridview и поле из базы данных.Я хочу сохранить это поле в теге строки в gridview, но после сохранения в теге с циклом Foreach, в другой функции, я вижу, он возвращает нулевое значение.Как мне сохранить это поле?Спасибо

private void UC_DKHoc_Load(object sender, EventArgs e)
{
    var dsLop = LopDangKyServices.LayDanhSachLopDangKy();
    var DatasourceGV = from lop in dsLop
                select new
                {
                    lop.MaLopDangKy,
                    lop.TenLopDangKy,
                    lop.CLB1.TenCLB,
                    lop.NamHoc,
                    lop.HocPhi,
                    lop.LichHoc
                };
    advancedDataGridView.DataSource = DatasourceGV.ToList(); // Display to gridview
    int i = 0;
    foreach (DataGridViewRow row in advancedDataGridView.Rows)
    {
        row.Tag = dsLop[i++].CLB; //save complete
    }
    advancedDataGridView.DisableFilter(STT);
}

В функции я вижу нулевые значения.

private void simpleButton1_Click(object sender, EventArgs e)
{  
    MessageBox.Show(advancedDataGridView.Rows[1].Tag.ToString()); //Null value
}

1 Ответ

1 голос
/ 26 сентября 2019

Вы можете использовать любой из следующих параметров:

  • Включить в список все необходимые вам свойства (включая CLB).Затем, после назначения списка как DataSource из DataGridView, скройте соответствующий столбец:

    advancedDataGridView.DataSource = list;
    advancedDataGridView.Columns["CLB"].Visible = false;
    
  • Создайте класс модели, содержащий все необходимые вам свойства, включая CLB.Затем просто украсьте CLB атрибутом [Browsable(false)].(Вам нужно выбрать результат, создав экземпляр класса модели, а не анонимный тип.)

    [Browsable(false)]
    public int CLB { get; set;}
    
  • Установите AutoGenerateColumns из DataGridView в false и добавьте нужные столбцыдо DataGridView.Убедитесь, что вы установили Name, DataPropertyName и HeaderText.Затем установите DataSource из DataGridView в список, который содержит все свойства, включая CLB:

    dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { 
        Name = "MaLopDangKy", 
        DataPropertyName = "MaLopDangKy", 
        HeaderText = "MaLopDangKy" });
    
    //Add rest of columns ...
    
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = list;
    

    . Вы можете добавить CLB как невидимый столбец DataGridView.Даже если вы не добавили его как столбец, вы можете получить доступ к свойству DataBoundItem DataGridViewRow, которое указывает на экземпляр элемента списка, который отображает строку.Приведите его к типу члена списка и используйте его свойство CLB.

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