检查DataGridView是否有DataSource

时间:2016-06-02 03:00:45

标签: c# excel datagridview

我有一个导入Excel File的模块,并在DataGridView Object中显示其内容。与此同时,我有一个模块可以将DataGridView Object DataSource as a DataTable的内容导出到Excel File

如何通过不执行if(dataGridView1.Rows.Count == 0){}条件来检查DataGridView是否具有DataSource。

这是因为我注意到即使用户导入或打开空Excel FileDataGridView Object仍会显示一个Column

这就是我想尝试检查DataGridView Object是否有DataSource

的原因

我正在寻找类似

的代码
if(dataGridView1.DataSource == true)
{
   // do something is DataSource if found or is bound
} 
else
{ 
   //do something is DataSource is not found or is not bound 
}

编辑 - 目前我正在使用此代码过滤空数据源:

假设:

var dtList = new Dictionary<string, DataTable>() {
    { "dataGridView1", (DataTable) (dataGridView1.DataSource) },
    { "dataGridView2", (DataTable) (dataGridView2.DataSource) },
    { "dataGridView3", (DataTable) (dataGridView3.DataSource) },
    { "dataGridView4", (DataTable) (dataGridView4.DataSource) }
};

dataGridView1dataGridView3没有DataSourceDataGridView Object为空。我运行下面的代码来过滤并删除那些空的DataTable

//Filter and Remove empty DataTable(s)
var remList = new List<string>();

    foreach(var dt in dtList) {
        try {
            var dump = dt.Value.GetType().ToString();
        } catch(Exception ex) {
            remList.Add(dt.Key);
        }
    }

    foreach(var rem in remList) {
        dtList.Remove(rem);
    }

使用此代码,我可以从DataTable过滤掉所有其他空dtList Object。但是,当然,我正在寻找比这更好的配方。所以是的,希望我能得到一些提示和代码。感谢

2 个答案:

答案 0 :(得分:1)

我建议编写代码来验证DataGridView中的空行,以避免导出空行。

您可以查找将DataSource验证为 null ,但我非常怀疑这与验证行计数有何不同。

由于您提到在导入Excel时看到添加了空行,因此可以通过执行此验证来避免将空数据网格视图导出为Excel。

DataTable source = dataGridView1.DataSource as DataTable;
var emptyrows = source.AsEnumerable()
                       .All(r=> r.ItemArray.All(x=> x == DBNull.Value));

if(!emptyrows)
{
   //export
}

答案 1 :(得分:0)

如果DataSource还没有被指定,它将是null所以你可以像下面那样检查它们:

if(dataGridView1.DataSource == null)
{
   // do something there is no assigned Datasource
} 
else
{ 
   //do something with the DataSource
}