我正在尝试从基于SQL SELECT的数据源绑定gridview。
但是,有时,数据源上不存在列,具体取决于从语句中返回的数据。我只想要一个gridview。
我将如何处理绑定,以免在GridView1.DataBind()
上抛出错误?
答案 0 :(得分:2)
不太确定你是如何做到这一点的,但你可以使用类似的代码检查列:
DataTable dt = GetMyDataFromDatabase();
if (dt.Rows.Count > 0)
{
if (!dt.Columns.Contains("MyColumn"))
{
//do whatever, maybe add the missing column?...
dt.Columns.Add("MyColumn", typeof(String));
}
}
另一种选择是不在ASPX上定义列,并在RowDataBound
和RowCreated
事件的代码隐藏中定义所有列。
答案 1 :(得分:1)
最简单的方法是确保列始终存在于每个查询结果中。如果需要,可以通过插入虚拟列来避免错误。
例如,这是您的默认查询
SELECT columnA, columnB, columnC FROM yourDB
如果缺少columnB
SELECT columnA, NULL AS columnB, columnC FROM yourDB
或者,如果您缺少columnA,它是一个必须具有值
的整数SELECT 0 AS columnA, columnB, columnC FROM yourDB
另一种选择是只在GridView中使用AutoGenerateColumns="true"
。但这样可以减少对设计和布局的控制。