系统浏览/编辑都没问题,但我想新增一行(触发addrow)时,却提示了下列错误:
如果删除ItemDataBound语句,则新增一行(触发addrow)没问题.要怎么解决???
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidCastException: 指定的转换无效。源错误:
行 347:
行 348: DataRowView drv = (DataRowView)e.Item.DataItem;
行 349: string COLOURS = (string)drv["S_FLAG_COLOUR"];
行 350: 源文件: c:\wk\webapplicationcsharp\sales.aspx.cs 行: 349
public void addrow(object s,EventArgs e)
{
DataTable dt=(DataTable)Session["MY_SALES"];
DataRow dr=dt.NewRow();
dt.Rows.Add(dr);
this.SALES.DataSource=dt;
this.SALES.DataKeyField = "S_ID";
this.SALES.DataBind();
//为添加的新行打开编辑模式
this.SALES.EditItemIndex = SALES.Items.Count - 1;
this.SALES.DataBind();
LBTN_Add.Visible = false;
}
public void SALES_ItemDataBound(object sender, DataGridItemEventArgs e)
{ if (e.Item.ItemType == ListItemType.Item)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
string COLOURS = (string)drv["S_FLAG_COLOUR"];
switch (COLOURS)
{
case "0":
{e.Item.ForeColor = Color.Black;
e.Item.ForeColor = Color.Black;
}
break;
case "1":
{
e.Item.ForeColor = Color.Red;
e.Item.ForeColor = Color.Red;}
break;
case "2":
{
e.Item.ForeColor = Color.DeepPink;
e.Item.ForeColor = Color.DeepPink;}
break;
}
}
}
解决方案 »
- 全选按钮的实现
- IText 生成PDF的问题
- 安装好PetPhop 4.0 之后,运行出现“项目C:\Program Files\Microsoft\.NET Pet Shop 4.0\Web 所需的应用程序未安装”的错误
- c# 刷新本页面用什么函数?
- 怎样上传一篇图文并茂的网页
- 如何更改DataGrid的HeaderStyle中字体的颜色???急!立即给分
- 我太黑仔了,搞了我成个下午了,都解决不了,急死我了,请求高手帮帮忙!!!!!!!!!!
- 安装vs.net2003时出错,高手救命~~~
- 如何才能取到指定Access数据库中所有的数据表的名称及表的字段名称,字段定义?
- execl数据如何导入SQL 中,大家帮帮忙!
- 我的水晶报表导出成Excel后数据都没了.
- 请教一个关于数据绑定的问题
{
if((e.Item.ItemType == ListItemType.Item) ||
(e.Item.ItemType == ListItemType.AlternatingItem))
{
DataRowView drv = (DataRowView)e.Item.DataItem;
string COLOURS ="";
if(drv!=null)
{
COLOURS = Convert.ToString(drv["S_FLAG_COLOUR"]);
switch (COLOURS)
{
case "0":
{e.Item.ForeColor = Color.Black;
e.Item.ForeColor = Color.Black;
}
break;
case "1":
{
e.Item.ForeColor = Color.Red;
e.Item.ForeColor = Color.Red;}
break;
case "2":
{
e.Item.ForeColor = Color.DeepPink;
e.Item.ForeColor = Color.DeepPink;}
break;
}
}
}
}
改成这样试试
public void SALES_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if((e.Item.ItemType == ListItemType.Item) ||
(e.Item.ItemType == ListItemType.AlternatingItem))
{
DataRowView drv = e.Item.DataItem as DataRowView;
string COLOURS ="";
if(drv!=null)
{
COLOURS = Convert.ToString(drv["S_FLAG_COLOUR"]);
switch (COLOURS)
{
case "0":
{e.Item.ForeColor = Color.Black;
e.Item.ForeColor = Color.Black;
}
break;
case "1":
{
e.Item.ForeColor = Color.Red;
e.Item.ForeColor = Color.Red;}
break;
case "2":
{
e.Item.ForeColor = Color.DeepPink;
e.Item.ForeColor = Color.DeepPink;}
break;
}
}
}
}
string COLOURS = (string)drv["S_FLAG_COLOUR"];哪能这么写?它的结合方式是先转换drv为string再求指定索引的数据当然会错了
直接这种就行了嘛:string COLOURS = drv["S_FLAG_COLOUR"].ToString();
改为(DataRowView)(e.Item.DataItem);
如果S_FLAG_COLOUR是字符类型是没问题的,如果不是就会转换错误.
string COLOURS = drv["S_FLAG_COLOUR"].ToString();
{
.....
}