Используйте столбец CheckBox DataGridView для столбца строковых данных

У меня есть эта таблица в базе данных:

applicant  |  module  |  date  |  approvation  | 
  xxxx         xxxx      xxxx        xxxxxxx
  yyyy         yyyy      yyyy        yyyyyyy
  tttt         tttt      tttt        ttttttt

У меня есть эта таблица БД. После запроса я назначаю DataTable моему DataGridView.DataSource:

QueryAssist qa = new QueryAssist();
DataTable dt = new DataTable();
dt = qa.runQuery('myquery');

dgvApprovazione.DataSource = dt;
dgvApprovazione.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);

// modify, transform 2nd column in cellLink
foreach (DataGridViewRow row in dgvApprovazione.Rows)
{
    row.Cells[1] = new DataGridViewLinkCell();
}

Теперь я хочу преобразовать столбец approvation, который представляет собой строку approved или not approved, и вместо этого показать флажок.

если значение этой ячейки равно approved, флажок установлен и не изменяется (только чтение).

что-то похожее:

foreach (DataGridViewRow row in dgvApprovazione.Rows)
{
    if (row.Cells[3].Value.ToString().Equals("APPROVED"))
    {
        row.Cells[3] = new DataGridViewCheckBoxCell();
    }
} 

У меня есть проблема для реализации ... помогите мне.

Возможно ? Как?

резюмируя:

Я хочу изменить столбец, значение которого содержит текст/строку (утверждено или не утверждено) в флажке (отмечено или не отмечено)

Извините за плохой английский ..

Хорошие альтернативы?


person rul3z    schedule 17.03.2016    source источник
comment
Изменение типа поля «Утверждение» на логическое в таблице базы данных сделает эту работу.   -  person ehh    schedule 31.03.2016


Ответы (1)


Для хранения значений yes/no или on/off или true/false в базе данных лучше использовать тип данных bit на сервере sql, но с помощью столбца DataGridViewCheckBoxColumn вы также можете отображать и редактировать строковый столбец, установив TrueValue и FalseValue.

В приведенном ниже примере я предположил, что у вас есть столбец с нулевым значением в базе данных, который должен хранить значения как APPROVED или NOTAPPROVED как nvarchar(50), и вам нужно отредактировать эти значения, используя DataGridViewCheckBoxColumn.

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

var column1 = new DataGridViewCheckBoxColumn();   
column1.Name = "column1";                         //Name of column
column1.HeaderText= "Is Approved";                //Title of column
column1.DataPropertyName = "approvation";         //Name of field in database
column1.TrueValue = "APPROVED";                   //True value
column1.FalseValue = "NOTAPPROVED";               //False Value
this.dataGridView1.Columns.Add(column1);

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

Если вам не нужно их редактировать и вы хотите только показать их, вы можете установить свойство столбца только для чтения в true.

person Reza Aghaei    schedule 30.03.2016
comment
вначале моя идея заключалась в том, чтобы скользить (для каждого) весь столбец, утвержденный или не утвержденный (строка)... затем создайте новый столбец (столбец флажка), который будет добавлен в представление данных, и если значение утверждено... флажок установлен, в противном случае флажок не установлен. и только теперь покажите datagridview. Я решил объявить поля "да/нет" в БД :) .. Но ваше решение хорошее.. - person rul3z; 04.04.2016
comment
Лучше использовать битовое поле, как сказано в ответе. Но для случаев, когда пользователю необходимо отредактировать (показать) строковый столбец с помощью флажка, решение может быть полезным :) - person Reza Aghaei; 04.04.2016