在C#的数据网格视图中显示Yes / No而不是0/1?

时间:2019-11-04 11:08:59

标签: c# winforms sqlite datagridview boolean

我正在从SQLite数据库中用c#填充数据网格,但是SQLite数据库没有真正的布尔值,因此我对SQLite INTEGER字段进行了检查以确保其为0或1。而不是显示0或在数据网格中为1,我想显示是/否。 1 =是,0 =否。我希望数据库中的数据保持不变,只需更改向用户显示的内容即可。现在,填充表的sql语句很简单:

SELECT * FROM TABLE1

实现此目标的最佳方法是什么?谢谢。

编辑: 有问题的字段是“受伤”字段。 表格架构:

CREATE TABLE "SmashRoster" (
    "SmashRosterID" INTEGER PRIMARY KEY AUTOINCREMENT,
    "CharacterName" TEXT NOT NULL,
    "TotalTournaments"  INTEGER NOT NULL,
    "Wins"  INTEGER NOT NULL,
    "Losses"    INTEGER NOT NULL,
    "Championships" INTEGER NOT NULL,
    "InjuriesCaused"    INTEGER NOT NULL,
    "Injured"   INTEGER NOT NULL DEFAULT 0 CHECK(Injured IN (0,1))
);

用于从数据库中提取数据的方法,绑定到datagrid在底部:

  SQLiteConnection cnn = new SQLiteConnection(@"Data 
    Source=C:\SQLiteDB\SQLiteDB.db;Version=3;");
  SQLiteCommand cmd;
  SQLiteDataReader dataReader;
  DataTable roster;

  cnn.Open();
  cmd = new SQLiteCommand(@"SELECT * FROM SmashRoster", cnn);
  roster = new DataTable();

  dataReader = cmd.ExecuteReader();
  roster.Load(dataReader);

  dataReader.Close();
  cmd.Dispose();
  cnn.Dispose();
  rosterGridView.DataSource = roster;

2 个答案:

答案 0 :(得分:1)

假设数据值是您所说的整数,则可以像这样使用CellFormatting控件的DataGridView事件:

private void grid_CellFormatting(object sender, ataGridViewCellFormattingEventArgs e)
{
  if ( e.ColumnIndex == columnIndex )
    if ( e.Value is int )
      e.Value = (int)e.Value == 0 ? "No" : "Yes";
}

所有非0的值都被认为是true,否则您可以根据需要修改测试。

columnIndex替换为您需要从0开始的索引。

如果您使用的是SQLite x64驱动程序,也可以替换int并由long进行强制转换。

您也可以像这样使用列名:

if ( (sender as DataGridView)?.Columns[e.ColumnIndex].Name == "column name" )

或查询中的绑定数据属性名称:

if ( (sender as DataGridView)?.Columns[e.ColumnIndex].DataPropertyName == "name" )

使用列索引或您独立于查询的名称。

使用数据属性名称,您将独立于列顺序和命名。

您可以选择自己喜欢的东西。

答案 1 :(得分:0)

取决于情况。

您可以在sql语句中直接使用大小写表达式。参见https://www.sqlitetutorial.net/sqlite-case/

如果使用某些业务对象层,则可以具有特定的属性以将该字段显示为计算字符串而不是整数。使用ADO.NET数据集/数据表,表达式列https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/dataset-datatable-dataview/creating-expression-columns

可能具有相同的行为

您可以使用datagridview的CellFormatting事件发现右列并将Int转换为String。