Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有datagridview\u CellFormatting用于格式化datagridview中单元格的显示?_C#_Winforms_Datagridview - Fatal编程技术网

C# 是否有datagridview\u CellFormatting用于格式化datagridview中单元格的显示?

C# 是否有datagridview\u CellFormatting用于格式化datagridview中单元格的显示?,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在做一个管理学生的应用程序。它将数据从SQL server加载到DataGridView。我的表有一个Boolean字段,名为Gender。 当表格加载到DataGridView中时,性别列正好显示在类型复选框下。我想将它的表示方式改为另一种方式,而不是像这样的复选框。(字符串显示“男性”或“女性”) 我尝试了很多在谷歌上搜索的解决方案。但是我找不到解决我问题的办法 SQL创建表代码: create table Student ( CodeSV varchar(5) not nul

我正在做一个管理学生的应用程序。它将数据从
SQL server
加载到
DataGridView
。我的表有一个
Boolean
字段,名为Gender。 当表格加载到
DataGridView
中时,性别列正好显示在类型复选框下。我想将它的表示方式改为另一种方式,而不是像这样的复选框。(字符串显示“男性”或“女性”)

我尝试了很多在谷歌上搜索的解决方案。但是我找不到解决我问题的办法

SQL创建表代码:

create table Student
(
    CodeSV varchar(5) not null primary key,
    FirstnameSV varchar(20) not null, 
    LastnameSV varchar(30) not null, 
    BirthDate date,
    Gender bit not null,
)
对象属性:

public int CodeSV{ get; set; }
public string FirstnameSV { get; set; }
public string LastnameSV { get; set; }
public DateTime BirthDate { get; set; }
public bool Gender { get; set; }
我使用以下代码在DataGridView中显示数据:

List<Object> list = new List<Object>();
BindingSource bs = new BindingSource();
list = ObjectDAO.ListAllStudent();
if (list != null)
{
    bs.DataSource = list;
    dgvManager.DataSource = bs;
    dgvManager.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
List List=新列表();
BindingSource bs=新的BindingSource();
list=ObjectDAO.listallstustudent();
如果(列表!=null)
{
bs.DataSource=列表;
dgvManager.DataSource=bs;
dgvManager.SelectionMode=DataGridViewSelectionMode.FullRowSelect;
}

因为您使用的是
,所以我建议您按照您描述的方式修改它。将
列表
用作网格的
数据源
时,类的“公开”公开(非集合)属性将映射到网格中的列。在这种情况下,
Gender
字段是一个布尔值,将显示为复选框

要将此值显示为字符串值(男/女)…那么我建议您在
Student
类中创建此“属性”…。像下面这样的

public string GenderString {
  get {
    if (Gender) {
      return "Male";
    }
    return "Female";
  }
}
这将把GenderString列“添加”到网格中。如果您不想显示
Gender
的“Boolean”列,可以将其设置为在网格中不可见,也可以将
Gender
属性设置为private。请记住,如果将
Gender
属性设置为private,则需要使用公共的“set”方法来设置其值


希望这有帮助。

您可能正在寻找的是
dataGridView\u CellPaint
事件

在这里,您可以绘制包含所需内容的字符串,并使用各种内置辅助函数绘制单元格应显示的其他内容

完成后,设置
e.Handled=true以防止正常绘画过度渲染您的物品

左侧显示复选框,右侧显示文本的示例:

我很懒,用一个神奇的数字(
24
)作为偏移量,但如果需要的话,可以通过更灵活的方式确定最佳值

单元格的排列方式如下:

dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleLeft;
由于DGV复选框在用户离开单元格之前不会相信其更改,因此我们需要此复选框才能按预期工作:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
注意:
ToString
产生的值在这里是
True
False
。如果您将复选框设置为允许第三种状态(
ThreeState=true
),则将
选中
取消选中
不确定
。然后由您来测试并显示所需的字符串


正如我在评论中所指出的,你实际上应该允许至少一种性别的交替一种未决定的状态;因此,
CheckBox
并不是最好的选择。请考虑使用下拉列表! 为现在和未来编码:将性别从二进制值扩展到至少三个值加上“未知”状态..1
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}