表格中有datagridview显示数据库表的内容,表格类型的一列是布尔值,因此在datagridview中显示true / false,但我想自定义它以显示是/否。 你建议哪种方式?
答案 0 :(得分:17)
在自定义格式化方面,我想到了两种可能的解决方案。
1.处理CellFormatting
事件并格式化您自己的事件。
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == yourcolumnIndex)
{
if (e.Value is bool)
{
bool value = (bool)e.Value;
e.Value = (value) ? "Yes" : "No";
e.FormattingApplied = true;
}
}
}
2.使用Custom Formatter
public class BoolFormatter : ICustomFormatter, IFormatProvider
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
{
return this;
}
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (arg == null)
{
return string.Empty;
}
bool value = (bool)arg;
switch (format ?? string.Empty)
{
case "YesNo":
{
return (value) ? "Yes" : "No";
}
case "OnOff":
{
return (value) ? "On" : "Off";
}
default:
{
return value.ToString();//true/false
}
}
}
}
然后像这样使用它,并处理CellFormatting
事件以使其正常工作
dataGridView1.Columns[1].DefaultCellStyle.FormatProvider = new BoolFormatter();
dataGridView1.Columns[1].DefaultCellStyle.Format = "YesNo";
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.CellStyle.FormatProvider is ICustomFormatter)
{
e.Value = (e.CellStyle.FormatProvider.GetFormat(typeof(ICustomFormatter)) as ICustomFormatter).Format(e.CellStyle.Format, e.Value, e.CellStyle.FormatProvider);
e.FormattingApplied = true;
}
}
修改强>
您可以订阅此类CellFormatting
事件
dataGridView1.CellFormatting += dataGridView1_CellFormatting;
希望这有帮助
答案 1 :(得分:2)
void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
var grid = (DataGridView)sender;
if (grid.Columns[e.ColumnIndex].Name == "IsActive")
{
e.Value = (bool)e.Value ? "True_Text_Replace" : "False_Text_Replace";
e.FormattingApplied = true;
}
}
答案 2 :(得分:1)
如果你只想展示,那怎么样? 这很容易思考。
data.list$A$value = 1
data.list$B$value = 2
data.list$C$value = 3
答案 3 :(得分:0)
对于vb代码:
使用下面的代码将布尔真/假显示更改为Datagrid中的复选框:
datagrid1.Columns.Add(New DataGridViewCheckBoxColumn)
使用下面的代码显示列标题:
datagrid1.Columns(column number).HeaderText = "User Status"
答案 4 :(得分:0)
如果将列换为绑定到具有bool和string列的列表/数据表的DataGridViewComboBoxColumn,则它将bool解码为所需的任何字符串(用户可以编辑值,但不能放置错误的值在)
doOnBound(conn -> conn.addHandler...)
此网格现在将显示一个组合,它曾经显示一个复选框,并且编辑该组合将更改布尔值
您不必将组合列绑定到数据表。也许您希望使用Tuple或ValueTuple的列表作为Yes / No组合的后备数据存储:
//your datatable has some boolean column and your DataGridView is bound to it
DataTable dt = new DataTable();
dt.Columns.Add("MyBoolColumn", typeof(bool)); //this is your bool column
dataGridView1.DataSource = dt;
//make a datatable that has 2 columns, string and bool, and 2 rows (one for true, one for false)
DataTable dv = new DataTable();
dv.Columns.Add("Dis"); //it will be shown in the combo
dv.Columns.Add("Val", typeof(bool)); //it will be used by the combo to set MyBoolColumn
dv.Rows.Add("Yeah baby", true);
dv.Rows.Add("Nooo way", false);
//make a combo box column bound to the values table above
//and connected to the table you show in the grid
var dgvcbc = new DataGridViewComboBoxColumn();
dgvcbc.DataPropertyName = "MyBoolColumn"; //connect to the grid table
dgvcbc.DisplayMember = "Disp"; //show this column
dgvcbc.ValueMember = "Val"; //use values from this
dgvcbc.DataSource = dv;
dataGridView1.Columns.Add(dgvcbc);
如果您的datagridview是在表单设计器中设计的,那么最简单的方法可能是将DispVal表添加到强类型的数据集,然后在选择器中将其作为“项目列表实例”提供,使您可以选择数据源用于组合列