我有一个datagridview,我填写如下:
var q= repository.GetStudents();//
dataGridView1.DataSource = null;
dataGridView1.Columns.Clear();
dataGridView1.DataSource = q;
dataGridView1.Columns.RemoveAt(1);
//Remove IsActive
//Cause I want to have my own implementation
dataGridView1.Columns[0].DataPropertyName = "StudentID";
dataGridView1.Columns[0].HeaderText = "Studunet ID";
dataGridView1.Columns[1].DataPropertyName = "IsActive";
dataGridView1.Columns[1].HeaderText = "Status";
“IsActive”属性是布尔类型。当显示“IsActive”单元格时,它显示true / false。我想用我自己的自定义值替换它。
答案 0 :(得分:11)
您可以使用DataGridView
的{{3}}事件,例如:
void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
var grid = (DataGridView)sender;
if (grid.Columns[e.ColumnIndex].Name == "IsActive")
{
e.Value = (bool)e.Value ? "MY_TEXT_FOR_TRUE" : "MY_TEXT_FOR_FALSE";
e.FormattingApplied = true;
}
}
编辑(根据评论):
它与您现在正在执行的操作非常相似,只需删除绑定列并添加所需类型的新列并正确设置DataPropertyName
,例如:
this.dataGridView1.Columns.Remove("COL_TO_CUSTOMIZE");
var btnCol = new DataGridViewDisableButtonColumn();
btnCol.Name = "COL_TO_CUSTOMIZE";
btnCol.DataPropertyName = "COL_TO_CUSTOMIZE";
var col = this.dataGridView1.Columns.Add(btnCol);
请注意,这会在最后添加列,但您可以使用dataGridView.Columns.Insert
方法而不是Add
来确定列的位置。
答案 1 :(得分:0)
关于DataGridViewComboBoxColumn的一件时髦事情是,您可以给它一个数据源,该数据源具有要查找的值列和要显示的值列,并且可以将其绑定到另一列值,然后它将为您执行查找
因此,假设您的学生集合q(或它们是什么)具有IsActive是/否,并且您希望其显示为“一直”或“没有机会”。.让我们将组合框散列在一起,这样做:
var cb = new DataGridViewComboBoxColumn();
cb.DisplayMember = "DisplayMe"; //the related text to show in the combo
cb.ValueMember = "ValueToLookup"; //the name in the combo's lookup list
cb.DataPropertyName = "IsActive"; //the name of your property on Student, to look up
cb.DataSource = "All the time,Not a Chance"
.Split(',')
.Select(s => new { DisplayMe = s, ValueToLookup = (s[0] == 'A') } )
.ToList();
我们如何生成组合的数据源并不重要;在这里,我将字符串分割成List<anonymous_string+bool>
,然后选择一个具有我需要的两个属性名称的新匿名类型;您可以使用具有某些命名属性的任何东西-KeyValuePair列表,Tuple等。
关键是组合可以读取您在DataPropertyName中引用的q.IsActive布尔,在ValueMember中命名的属性列表中查找该布尔,然后显示DisplayMember中命名的属性。它也可以用于编辑,因此用户可以从组合中选择一个新项目,而翻译则以另一种方式进行工作-“用户选择什么?在ValueMember中命名的属性的值是多少,将该值放入学生中IsActive属性在DataPropertyName中命名”。而且它也不止于布尔值;值成员可以是任何东西-整数,日期等