使用DataGridView复选框列来显示字符串数据列

3

I have this table in database:

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转换为复选框,其中字符串的值可以是approvednot approved

如果单元格的值为approved,则复选框应该被勾选并且只读(不可修改)。

类似于下面这样:

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

我想实现一个问题,需要您的帮助。

这个有可能吗?怎么做?

回顾一下:

我想把一个值为文本/字符串(已批准或未批准)的列更改为复选框(已勾选或未勾选)。

很抱歉我的英文不好。

有好的替代方案吗?


将数据库表中的Approvation字段类型更改为布尔类型即可完成任务。 - ehh
1个回答

4
为了在数据库中存储yes/noon/offtrue/false值,最好使用SQL Server中的bit数据类型,但是通过设置TrueValueFalseValue属性,您也可以使用DataGridViewCheckBoxColumn显示和编辑字符串列。

在下面的示例中,假设您有一个可空列需要将值存储为nvarchar(50)APPROVEDNOTAPPROVED,并且您需要使用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。


起初,我的想法是滑动(foreach)整个“approved”或“not approved”(字符串)列...然后创建一个新列(复选框列)添加到datagridview中,如果值为“approved”...复选框选中,否则未选中复选框。然后才显示datagridview。我已经通过在数据库中声明yes/no字段来解决了这个问题 :) ...但是您的解决方案也很好。 - rul3z
1
最好按照答案中所说使用位域。但是对于用户需要使用复选框编辑(显示)字符串列的情况,该解决方案可能很有用 :) - Reza Aghaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接