如何告诉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();
}
答案 0 :(得分:2)
以下是我能想到的几个选项。
即使没有返回任何记录,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");
}
您可以实例化一个新的DataTable
,并在其中添加所需的列,然后使用它。我真的没有注意到这一点,但这是一个选择。
if (datset2.Rows.Count == 0)
{
datset2 = new DataTable();
datset2.Columns.Add("Message", typeof(string));
datset2.Rows.Add("No items found");
}
您只需向Label
添加Form
,将其放在DataGridView
上,然后将其隐藏起来,直到需要为止。
labelNoDataMessage.Text = "No items found";
if (datset2.Rows.Count == 0)
{
labelNoDataMessage.Show();
}
某些第三方控件可能具有内置功能以支持此功能,例如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;