显示临时"未找到任何项目" DataGridView中的行如果为空

时间:2015-01-20 16:57:34

标签: c# mysql winforms

如何告诉DataGridView如果它是空的,它应该自动临时添加一个新行,它的值应该是"没有找到项目"?

使用消息框可以很容易地解决这个问题,但我不喜欢这种方法。

这是我的代码

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();
}

2 个答案:

答案 0 :(得分:2)

以下是我能想到的几个选项。

  1. 即使没有返回任何记录,datset2仍然应该有一个名为&#34; product_item&#34;的列。执行查询后,您可以重复使用它。

    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();
    }
    
  4. 某些第三方控件可能具有内置功能以支持此功能,例如Telerik的RadGridView及其ShowNoDataText属性。但是,默认DataGridView没有此类属性。

答案 1 :(得分:0)

适应格兰特·温尼的答案,我最终使用了这个

 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;