【问题标题】:Show temporary "No items found" row in DataGridView if empty如果为空,则在 DataGridView 中显示临时“未找到项目”行
【发布时间】:2015-01-20 16:57:33
【问题描述】:

我如何告诉 DataGridView 如果它是空的,它应该自动在里面临时添加一个新行并且它的值应该是“No items found”?

使用消息框可以轻松解决这个问题,但我不喜欢这种方法。

这是我的代码

using (MySqlConnection conn = new MySqlConnection(myConnection))
{
    string cell = dataGridView3.CurrentCell.Value.ToString();
    conn.Open();
    string query = "SELECT product_item FROM dequor.prods2,dequor.prods where prods.idprods = prods2.prods_idprods and prod_brand=?para";
    using (MySqlCommand cmd = new MySqlCommand(query, conn))
    {
        cmd.Parameters.AddWithValue("?para", cell);
        try
        {
            sda2 = new MySqlDataAdapter();
            sda2.SelectCommand = cmd;
            datset2 = new DataTable();
            sda2.Fill(datset2);
            bsource2 = new BindingSource();


            bsource2.DataSource = datset2;
            dataGridView2.DataSource = bsource2;
            DataGridViewColumn column = dataGridView2.Columns[0];
            column.Width = 125;
            sda2.Update(datset2);

            if (dataGridView2.RowCount < 1)
            {
                datset2.Clear();
                string row = "NO items found";
                dataGridView2.Rows.Add(row);
             //////got an error here
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("" + ex);
        }
    }
    conn.Close();
}

【问题讨论】:

  • 使用标点符号会让你的问题更容易理解
  • 哦对不起我的错误
  • “这里有一个错误” - 你需要告诉我们错误是什么。编译错误?运行时错误? Edit your question 包含此信息。
  • "当控件是数据绑定时,行不能以编程方式添加到 datagridviews 行集合中"..还有另一种添加行的方法吗?
  • @grant tnx 在您的帮助下我已经解决了我的问题

标签: c# mysql winforms


【解决方案1】:

这里有几个我能想到的选项。

  1. 即使没有返回记录,datset2 在执行查询后仍应有一个名为“product_item”的列,因此您可以重复使用它。

    datset2 = new DataTable();
    sda2.Fill(datset2);
    
    if (datset2.Rows.Count == 0)
    {
        // I'm assuming "product_item" is a string
        datset2.Rows.Add("No items found");
    }
    
  2. 您可以实例化一个新的DataTable,并在其中添加您想要的列,然后使用它。我真的不明白这一点,但这是一种选择。

    if (datset2.Rows.Count == 0)
    {
        datset2 = new DataTable();
        datset2.Columns.Add("Message", typeof(string));
        datset2.Rows.Add("No items found");
    }
    
  3. 您可以将Label 添加到您的Form,将其放置在DataGridView 上方,然后将其隐藏,直到有必要为止。

    labelNoDataMessage.Text = "No items found";
    
    if (datset2.Rows.Count == 0)
    {
        labelNoDataMessage.Show();
    }
    

某些第三方控件可能具有支持此功能的内置功能,例如 Telerik 的 RadGridView 及其 ShowNoDataText 属性。然而,默认的DataGridView 没有这样的属性。

【讨论】:

    【解决方案2】:

    改编格兰特温尼的答案,我最终使用了这个

     var dataTable = new DataTable();
     dataTable.Columns.Add("Message", typeof(string));
     dataTable.Rows.Add("No items found");
    
     myDataGridView.DataSource = new BindingSource { DataSource = dataTable };
     myDataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多