Как установить или снять флажок в Datagridview на основе существующей записи данных из таблицы - PullRequest
0 голосов
/ 17 марта 2020

Мне нужна помощь по части этого кода. Я использую столбец флажок в моем DataGridView элементе управления. Когда я получаю свою запись данных, если значение существует, флажок должен быть установлен, а если нет, то он должен оставаться непроверенным. Как мне сделать sh, что на DataGridView с этим видом логики c?

using (DataContext dtContext = new DataContext())
{
  var query = (from i in dtContext.materialTBheader where i.proj == Proj_id select i);

  foreach (var r in query)
  {
    if (!string.IsNullOrEmpty(r.materialheader_id.ToString()))
    {
      string[] row = { r.materialheader_id.ToString(), r.materialname, r.description, string.Format("{0:n2}", r.totalAmount), GetCount(r.materialname, txtMainProjectHeader_id, Convert.ToDecimal(r.totalAmount)), "", -- cell checkbox if record exist true checked if not false uncheck };
      dGVMaterialHeaderList.Rows.Add(row);
    }
  }
}

1 Ответ

0 голосов
/ 17 марта 2020

Нет необходимости добавлять строки по каждому элементу foreach, используйте свойство DataSource

Предположим, у вас есть список лиц, и вы хотите показать их в dataGridview, вам нужно выбрать опцию

1) добавьте свой столбец в сетку данных в окне свойств Visual Studio

2) добавьте свой столбец с кодировкой

, затем сопоставьте свои данные с сеткой, вот простой пример, чтобы помочь йо

    public class Person
    {
        public int Id { get; set; }
        public string LastName { get; set; }
        public bool Married { get; set; }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
       //your data from ef
        var myData = new List<Person>
        {
            new Person{Id=1,LastName="A1",Married =true},
            new Person{Id=1,LastName="A2",Married =false},
            new Person{Id=1,LastName="A3",Married =true},
        };
        //your columns
        var idColumn = new System.Windows.Forms.DataGridViewTextBoxColumn
        {
            Name = "Id",
            HeaderText = "Id",
            DataPropertyName = "Id"
        };

        var lastNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn
        {
            Name = "LastName",
            HeaderText = "LastName",
            DataPropertyName = "LastName"
        };

        var marriedColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn
        {
            Name="Married",
            HeaderText="Married",
            DataPropertyName= "Married"
        };
        // add your columns to grid
        dGVMaterialHeaderList.Columns.Add(idColumn);
        dGVMaterialHeaderList.Columns.Add(lastNameColumn);
        dGVMaterialHeaderList.Columns.Add(marriedColumn);

        dGVMaterialHeaderList.AutoGenerateColumns = false;
        //bind your data
        dGVMaterialHeaderList.DataSource = myData;
    }

Grid Data

В вашем случае ответ будет примерно таким:

using (DataContext dtContext = new DataContext())
        {
            var query = (from i in dtContext.materialTBheader where i.proj == Proj_id select i).ToList();

            var gridData = query.Select(r=>new
            {
                materialheader_id = r.materialheader_id.ToString(),
                r.materialname,
                r.description,
                totalAmount = string.Format("{0:n2}", r.totalAmount),
                Count = GetCount(r.materialname, txtMainProjectHeader_id, Convert.ToDecimal(r.totalAmount)),
                isExist = !string.IsNullOrEmpty(r.materialheader_id.ToString())?true:false
            }).ToList();
            dGVMaterialHeaderList.DataSource = gridData;

        }

Я не знаю вашего структура данных, но я знаю, что это не лучший подход, который вы выбираете

Я надеюсь, что это может помочь вам

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