在datagridview列中替换true/false

Bab*_*loo 8 c# datagridview winforms

我有一个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";
Run Code Online (Sandbox Code Playgroud)

"IsActive"属性是布尔类型.当显示"IsActive"单元格时,它显示true/false.我想用我自己的自定义值替换它.

我读这个这个职位,但我解决不了我的问题.

dig*_*All 11

你可以使用的CellFormatting事件DataGridView,例如:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑(根据评论):

它与您现在正在执行的操作非常相似,只需删除绑定列并添加所需类型的新列并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);
Run Code Online (Sandbox Code Playgroud)

请注意,这会在末尾附加列,但您可以使用dataGridView.Columns.Insert方法而不是使用方法来确定列的位置Add.

  • @persianDev:理论上你应该能够通过访问`((DataGridViewDisableButtonCell)dgv.Rows [i] .Cells [j])初始化属性.启用`但实际上我注意到当数据源是属性时属性有问题界.但我不明白为什么...... (2认同)