日期:2014-05-18  浏览次数:20711 次

如何自定义一个Dataset的Column啊。
各位大大,

数据库里面有一个“PayTable”表,其中一个Column是DateTime类型的,用来记录每个人每个月的缴费日期,比如2008-9-9.
我在DataGridView里面绑定了一个Dataset, 这个Dataset我在VS2005的Designer里面多添加了一个Column叫“PayState”,用来显示一个人当月有没有缴费,如果有显示日期,如果没有显示“未缴费”。

原来我以为在Dataset.cs里面捕获RowChanging事件,在里面自己修改DataTable的值就好了,但是会有一个不允许在事件中修改值的异常。
又不想在Dataset.design.cs里面改,因为下次如果修改一下Dataset,修改的代码就不见了。

各位大大有什么好的解决方法么?
谢谢鸟~
拜。。。。使劲拜~~~拜神

------解决方案--------------------
1,你可以在SQL查询时候就生成你所需要列PayState,然后直接绑定GridView。
2,你可以遍历你的DataSet,设置DataSet的新列PayState,然后绑定GridView

------解决方案--------------------
你可以在最后 this.dataGridView1.Columns.Add(new DataGridViewColumn());

加入一列
------解决方案--------------------
select case DateTime when null then '未缴费' else DateTime end as PayState
------解决方案--------------------
不要直接绑定数据库的表,你可以建立一个中间表。
比如: 
DataTable temp = new DataTable();
temp = PayTable.copy();


DataColumn dc = new DataColumn("未缴费");
temp.Columns.Add(dc);

然后你再绑定。 

this.dataGridView1.DataSource = temp ;

------解决方案--------------------
第一种
select Column1,Column2,case when Column is null
then
 '未缴费'
else
column
end
as 'column3'
from PayTable
Column is null 就是为缴费的条件,我现在假设是没缴费的日期为空


第二种
foreach(DataRow dr in PayTableDataSet.Tables["TableName"].Rows)
{
if ("" == dr["Column"].ToString() || null == dr["Column"].ToString())
dr["Column"] = "未绑定";
}
------解决方案--------------------
在这个ItemDataBound事件中进行判断一下就行了。
判断时间值是否为空:dataGridView1.
private void dataGridView1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(判断是内容行)
if(e.Item.Cells[n].Text!="")
{//没有时间,n代表时间所在列
}
else
{//有时间
}

}
------解决方案--------------------
--获取本月第一天
declare @date datetime
select @date = convert(datetime,convert(varchar(4),year(getdate())) + '-' + convert(varchar(2),month(getdate())) + '-1 00:00:00.000')

select *,(case when PayState >= @date then PayState else '未缴费') as mycolumn from mytable