这是我的ASP.NET代码段。
我正在尝试选择GridView行并在会话变量中添加所选行项。
// ======================== MyGridView ========================
protected void GridView_MyGridView_SelectedIndexChanged(object sender, EventArgs e)
{
// Get Selected Row Items
Items myitems = new Items();
Session["Items"] = myitems;
((Invoices)Session["Items"]).ItemNo = int.Parse(((GridViewRow)(((WebControl)(sender)).Parent.Parent)).Cells[0].Text);
}
我不想使用GridView列附带的可点击选择按钮。
我通过以下代码处理:
protected void GridView_MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';";
e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
e.Row.ToolTip = "Click to Select a Visit.";
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(sender as GridView, "SELECT$" + e.Row.RowIndex);
}
}
现在,当我运行程序时,一旦gridview选择了行更改,我就会收到以下错误:
无法转换类型为#System; Web.UI.HtmlControls.HtmlForm'的对象输入' System.Web.UI.WebControls.GridViewRow'。
请提供您的反馈。
答案 0 :(得分:0)
不确定你想要做什么,但你的演员阵容是造成它的原因。你对Parent.Parent的调用在树上走得太远了,你最终得到了表单容器,根本不再在GridView中。
为什么不尝试:
,而不是你正在尝试的演员GridViewRow row = GridView_MyGridView.SelectedRow;
((Invoices)Session["Items"]).ItemNo = int.Parse(row.Cells[0].Text);
请记住,如果单元格中没有文本,这仍然会出错,因此您可能希望查看使用其他逻辑或TryParse()来处理它。