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);
}