更新
在编辑问题时,我发现了自己的错误(无法转换为string
。)
非常感谢所有人,所有建议最有帮助。
原始问题
我有.aspx
页面,GridView
,数据绑定到ObjectDataSource
,其中包含DataSet
,其中包含DataTable
。
但是,当处理RowDataBound
上的GridView
回调时,我无法按列名引用基础数据集中的列,它们只返回DBNull
类型的对象。所以:
protected void accountsGV_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// One way:
// This works, but uses a hard coded column index which
// I want to replace.
if (e.Row.Cells[11].Text != " ")
{
// Apply certain styles to the row depending on
// the contents of the cell.
}
// Another way. This doesn't work - "date" is always DBNull.
DataRow row = (e.Row.DataItem as DataRowView).Row;
DateTime date;
if(!Convert.IsDBNull(row["date"]))
{
date = (DateTime)row["date"]);
if (date < SomeConstantDate)
{
// Apply certain styles to the row depending on
// the contents of the cell.
}
}
}
}
具体而言:
row["date"]
返回DBNull
类型的对象。row[11]
会返回DateTime
。row.Table.Columns["date"]
会返回有效的DataColumn
row[row.Table.Columns["date"]]
返回DBNull
类型的对象。有人能说明为什么会这样吗?
设置
<asp:GridView ID="GV" runat="server" DataSourceID="ODS"
AutoGenerateColumns="false"
... snip ...
onrowdatabound="GV_RowDataBound" >
<Columns> ... </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ODS" runat="server"
SelectMethod="getData"
... snip ...
</asp:ObjectDataSource>
答案 0 :(得分:1)
有几点需要考虑。
e.Row.Cells
指的是格式化输出,而不是对象本身。
而不是试试这个
var data = (DataRowView)e.Row.DataItem;
var date = data["Date"];
if(date != null and date.ToString() == "...")
{
do something based on the value of date.
}