问题描述
VS2010+C#gridview中利用模板列+SqlDataSource实现绑定,结果出了个奇怪的问题,老说我源中没这个字段RoleID。。。先上aspx的代码::SqlDataSource代码:<asp:SqlDataSourceID="SqlDataSourceRoleOnly"runat="server"ConnectionString="<%$ConnectionStrings:EmergenEvalConnectionString%>"SelectCommand="SELECT[RoleID],[Role]FROM[tbRole]"></asp:SqlDataSource>改查询经检查是成功的,可以看到内容gridview中templatefield代码:<asp:TemplateFieldHeaderText="权限"SortExpression="权限"><EditItemTemplate><asp:DropDownListID="DropDownList1"runat="server"DataSourceID="SqlDataSourceRoleOnly"SelectedValue=<%#Bind("[RoleID]")%>DataValueField="权限"DataTextField="Role"Width=80onselectedindexchanged="DropDownListRole_SelectedIndexChanged"><%--每次本句中报错{"DataBinding:“System.Data.DataRowView”不包含名为“RoleID”的属性。"}--%></asp:DropDownList></EditItemTemplate><ItemTemplate><asp:DropDownListID="DropDownList1"runat="server"DataSourceID="SqlDataSourceRole"SelectedValue=<%#Bind("权限")%>DataValueField="权限"DataTextField="Role"Enabled=false></asp:DropDownList></ItemTemplate><ControlStyleWidth="60px"/></asp:TemplateField>
解决方案
解决方案二:
参考,自己修改一下。DataValueField="权限"根本就没有权限列
解决方案三:
<asp:DropDownListID="DropDownList1"runat="server"DataSourceID="SqlDataSourceRoleOnly"SelectedValue=<%#Bind("GRIDVIEW的字段")%>DataValueField="RoleID"DataTextField="Role"Width=80onselectedindexchanged="DropDownListRole_SelectedIndexChanged">
解决方案四:
数据源里不包含RoleID字段!!
解决方案五:
查看:你绑定的表里面有没有RoleID字段如何有RoleID字段就看看你你绑定的DataValueField="权限"表里有没有权限这一列
解决方案六:
感谢各位的回复。的确如上面所说,报错就是数据源没有这一列,可我的确有这一列的。我再详细说明下这里的思路:在gridview中绑定了表A,表A中的“权限”字段只存储了真实权限的一个ID,具体的权限信息放在了表B中。因此我将gridview“权限"这一列改成模板列,并内嵌了dropdownlist,这样显示,修改时都是显示的具体的权限名称,但存储进表A时,又必须写入该权限对应的ID。SqlDataSourceRoleOnly数据源绑定的就是表B下图为sqlserver中对表B的设计结构,可见的确是有该字段的。
解决方案七:
DataValueField="权限"DataTextField="Role"还是没有权限列啊,编译器哪晓得你的"权限"代表的是Role还是RoleID数据库中根本没有中文列名
解决方案八:
抱歉,DataValueField="权限"是我后来改的忘记改回来了。更改为:<asp:DropDownListID="DropDownListRole"runat="server"DataSourceID="SqlDataSourceRoleOnly"SelectedValue=<%#Bind("RoleID")%>DataValueField="RoleID"DataTextField="Role"Width=60></asp:DropDownList>结果是依旧是出错,同样的错误。
解决方案九:
gridview嵌套DropDownList数据绑定显示商品信息实例//GridView和DropDownList控件设置<asp:GridViewID="GridView1"runat="server"AllowPaging="True"AllowSorting="True"AutoGenerateColumns="False"BackColor="#DEBA84"BorderColor="#DEBA84"BorderStyle="None"BorderWidth="1px"CellPadding="3"CellSpacing="2"DataKeyNames="产品编号"ShowFooter="True"Width="642px"OnRowCreated="GridView1_RowCreated"OnRowDataBound="GridView1_RowDataBound"onpageindexchanging="GridView1_PageIndexChanging"PageSize="5"onrowediting="GridView1_RowEditing"onrowupdating="GridView1_RowUpdating"//字符关系其他设置省略<EditItemTemplate><asp:DropDownListID="ddlSellState"runat="server"AutoPostBack="True"><asp:ListItemValue="True">停售</asp:ListItem><asp:ListItemValue="False">不停售</asp:ListItem></asp:DropDownList></EditItemTemplate></asp:GridView>//处理绑定显示事件protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse){intID=int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());boolPaperState=bool.Parse(((DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlSellState")).SelectedValue);stringstrsql="UPDATEtb_OrderFormSET是否停售=@SellStateWHERE产品编号=@ID";SqlConnectionconn=newSqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);conn.Open();SqlCommandcomm=newSqlCommand(strsql,conn);comm.Parameters.Add(newSqlParameter("@ID",SqlDbType.Int,4));comm.Parameters["@ID"].Value=ID;comm.Parameters.Add(newSqlParameter("@SellState",SqlDbType.Bit,1));comm.Parameters["@SellState"].Value=PaperState;if(Convert.ToInt32(comm.ExecuteNonQuery())>0){Response.Write("<scriptlanguage=javascript>alert('设置成功!');location='Default.aspx'</script>");}//CodeGo.net/else{Response.Write("<scriptlanguage=javascript>alert('设置失败!');location='Default.aspx'</script>");}//取消编辑操作GridView1.EditIndex=-1;//调用自定义方法DbBind()重新绑定GridView控件中信息DbBind();}