在datagridview布尔列而不是0/1值中显示图像

时间:2019-08-14 10:57:12

标签: c# winforms datagridview

我有一个具有数据网格视图的WinForms桌面应用程序。 它从Sql服务器加载数据,并且表中有一个位列USRstatus。 表格列如下:

USRstatus(bit) , USERNAME, USERTYPE

当我在DataGridView中加载表格时,我想显示图像而不是0/1值。

图像在资源中:

Pharm.propreties.recourses.on
Pharm.propreties.recourses.off

编辑 在dgv的负担下,我创建了一个图像列并将其插入

DataGridViewImageColumn IMG =new 
DataGridViewImageColumn();
IMG.name="status";
DGVUsers.Columns.Insert(1,IMG);
DGVUsers.Columns["USRStatus"]. Visible=false;

然后我根据USRstatus值的值来填充每一行的值。

for (int i=0;i<DGVUsers.RowCount;i++)
{
      If(Convert.ToByte(DGVUsers.Rows[i].Cells["USRStatus"].Value==1)
       DGVUsers.Rows[i].Cells["status "].Value=Pharma.Propreties.Recourcess.on;
      Else
       DGVUsers.Rows[i].Cells["status"].Value=Pharma.Propreties.Recourcess.off;
} 

它工作正常,但我想通过替换整个列来做到这一点,并且如果可能的话,不要依赖于另一列来创建新的列

1 个答案:

答案 0 :(得分:0)

您可以在DataGridView中使用DataGridViewImageColumn。创建新列时,只需选择类型DataGridViewImageColumn。要更改图像时,只需设置该值即可。

if ()
    DataGridView.Rows[0].Cells[0].Value = Pharm.Propreties.Recourses.on;
else
    DataGridView.Rows[0].Cells[0].Value = Pharm.Propreties.Recourses.off;

要查看它是打开还是关闭,可以使用equals方法(每种类型都有此方法):

if (DataGridView.Rows[0].Cells[0].Value.Equals(Pharm.Properties.Resources.on)
{ }

另一种方法是使用Tag变量(每个winforms控件都具有此变量-System.Windows.Forms.Control):

DataGridView.Rows[0].Cells[0].Tag = true;

然后,获取其值:

if (DataGridView.Rows[0].Cells.Tag as bool)
{ }

if ((bool)DataGridView.Rows[0].Cells.Tag)
{ }

我个人更喜欢as bool选项,它更加清晰美观。

另一种方法是创建一个新控件,但为此目的,它要复杂得多。

祝你好运!