在datagridview列中替换true / false

时间:2012-03-28 19:32:30

标签: c# winforms datagridview

我有一个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。我想用我自己的自定义值替换它。

我看了thisthis个帖子,但我无法解决我的问题。

2 个答案:

答案 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中命名”。而且它也不止于布尔值;值成员可以是任何东西-整数,日期等

相关问题