在ASP.NET的GridView控件中,当绑定的数据源不包含任何记录时,会显示一个空数据行。为了在Windows Forms应用程序中实现类似的功能,创建了一个组件,它允许在数据源为空时展示自定义文本。
在ASP.NET中,可以通过设置EmptyDataText属性来指定在空数据行中显示的文本。然而,Windows Forms应用程序并没有这个属性,因此创建了一个组件来实现这一功能。
下面的屏幕截图展示了EmptyDataText Grid组件的属性。
绑定了0条记录的网格:
绑定后的网格看起来像这样:
以下代码是自解释的。以下代码已写在Component\DataGrid.cs中。在DataGrid.cs中,覆盖了DataGridView的Paint方法。
以下代码已写在Form1.cs中:
public class CustomDataGridView : DataGridView
{
public string EmptyDataText { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (DataSource != null && DataSource.Count == 0)
{
e.Graphics.DrawString(EmptyDataText, this.Font, Brushes.Black, new PointF(0, 0));
}
}
}
在Form1.cs中:
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = GetDataSource();
dataGridView1.EmptyDataText = "没有找到记录";
}
private DataTable GetDataSource()
{
// 模拟从数据库获取数据
DataTable dt = new DataTable();
// dt.Columns.Add("Column1", typeof(string));
// dt.Rows.Add("Row1");
return dt;
}
现在,将尝试支持自动标签显示,而不是检查以下代码行:
if (dt != null && dt.Rows.Count > 0)
{
// Remove text when records exist
dataGridView1.EmptyDataText = "";
}
else
{
// Assign text when no record found
dataGridView1.EmptyDataText = txtEmptyText.Text;
}