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

我正在从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;
xfxxfx0406 回答:在C#的数据网格视图中显示Yes / No而不是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" )

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

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

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

,

取决于情况。

您可以在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。

本文链接:https://www.f2er.com/3167279.html

大家都在问