【问题标题】:Correct way to determine DataGridView DataSource is DataTable or DataView in C#C#中判断DataGridView DataSource的正确方法是DataTable还是DataView
【发布时间】:2014-10-16 08:49:12
【问题描述】:

确定DataGridView DataSourceDataTable还是DataView的正确方法是为了这个代码-p。

//data bind
myDataTable = getDataTableFromDataBase()
datagridview1.DataSource = myDataTable;

然后我尝试从 DataGridView 上面获取 DataTable 我这样做了。

DataTable temp = (DataTable)(this.datagridview1.DataSource);

然后它给了我这样的错误,无法将“System.Data.DataView”类型的对象转换为“System.Data.DataTable”

当我想从 DataGridView 获取数据源时,我会做这件讨厌的事情。 这是工作,但最好的方法是什么?

 DataTable dt_update = new DataTable();
                try
                    {
                        DataView dv = (DataView)(this.datagridview1.DataSource);
                        tempTable = (DataTable)dv.Table;                            
                    }
                    catch (InvalidCastException ex)
                    {
                        try
                        {
                           tempTable = (DataTable)datagridview1.DataSource;
                        }
                        catch { }
                    }

【问题讨论】:

  • 也许这个:stackoverflow.com/questions/7382932/… 可以帮助你澄清
  • 顺便说一句,为什么你有三个表dt_updatedtbltempTable?至少有一个似乎是多余的。你想用这张桌子做什么?

标签: c# datagridview


【解决方案1】:

这样试试

if(datagridview1.DataSource is DataTable)
{
    dt_update = (DataTable)datagridview1.DataSource
}
else if (datagridview1.DataSource is DataView)
{
    dt_update = (DataView)datagridview1.DataSource.Table
}

【讨论】:

  • 帮我找is关键字用法
  • @Jimmer 你也可以这样做:datagridview1.DataSource.GetType() == typeof(DataTable)
【解决方案2】:

一种方法,使用as operator 来尝试投射它:

DataTable dtbl = datagridview1.DataSource as DataTable;
if(dtbl == null)
    dtbl = (datagridview1.DataSource as DataView).Table; 
tempTable = dtbl;

【讨论】:

  • 帮我找as关键字用法
【解决方案3】:

试试这个:

           try
           {
               DataTable dt_update = datagridview1.DataSource.GetType() == typeof(DataView) ? ((DataView)datagridview1.DataSource).Table : (DataTable)datagridview1.DataSource;
           }
           catch (Exception)
           {

               throw;
           }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2016-09-16
    • 2012-09-22
    相关资源
    最近更新 更多