使用c在datagrid视图中更新时替换数据#

4xrmg8kj  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(315)


上面的图片0和1来自数据库,同时显示数据网格视图中的值1被替换为高,0被替换为低,我对此一无所知,请帮助我解决此问题

con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "select dataa from new";
            cmd.ExecuteNonQuery();
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            dataGridView1.DataSource = dt;
            con.Close();
8ljdwjyq

8ljdwjyq1#

您可以使用不同的解决方案来处理该案例,包括:
使用datagridviewcomboboxcolumn(→ 需要编辑时首选)
使用单元格格式(→ 如果不需要编辑,则首选)
更改查询以返回格式化数据(→ 用于只读数据)

选项1-使用datagridviewcomboboxcolumn

添加 DataGridViewComboBoxColumn :

var c = new DataGridViewComboBoxColumn();
c.DataPropertyName = "Column1"; //Name of your data column
c.HeaderText = "Column1";       //Header text of your data column
c.DataSource = new[] {
    new { Key = 0, Name = "Low" },
    new { Key = 1, Name = "High" } }.ToList();
c.ValueMember = "Key";
c.DisplayMember = "Name";
c.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;  
//You can try other styles as well as setting `ReadOnly` to true
dataGridView1.Columns.Add(c);

选项2-使用单元格格式

另一种选择是使用 CellFormatting 事件:

dataGridView1.CellFormatting += (obj, args) =>
{
    try
    {
        var value = Convert.ToInt32(args.Value);
        if (value == 0)
            args.Value = "Low";
        if (value == 1)
            args.Value = "High";
        return;
    }
    catch (Exception) { }
    args.Value = "Unknown";
};

选项3-更改查询

您可以更改查询以获取格式化数据,例如使用 CASE :

SELECT CASE [YourColumn] WHEN 1 THEN 'High' WHEN 2 THEN 'Low' END AS Column1
FROM [YourTable]

示例输出
对于以上所有代码,您可以从数据库加载数据,也可以使用以下测试数据进行测试:*

var dt = new DataTable();
dt.Columns.Add("Column1", typeof(int));
dt.Rows.Add(1);
dt.Rows.Add(0);
dt.Rows.Add(0);
dt.Rows.Add(1);

并确保设置数据源:

dataGridView1.DataSource = dt;

相关问题