WebForms中GridView1同时定义DataSource与DataSourceID报错,未用该属性仍触发问题
我之前也碰到过一模一样的坑——明明自己没在代码里写DataSourceID,也没手动绑定数据,却弹出这个错误。别着急,大概率是隐藏的自动绑定在搞鬼,以下是几个排查方向:
检查ASPX源码里的隐式绑定:有时候在设计模式下拖拽数据源控件(比如SqlDataSource),Visual Studio会偷偷给GridView加上
DataSourceID属性,哪怕你后来删掉了数据源控件,这个属性可能还留在GridView标签里。打开你的ASPX页面源码,全局搜索DataSourceID,看看GridView标签里是不是被自动加上了,有的话直接删掉就行。排查设计器自动生成的代码:VS的
.designer.cs文件有时候会偷偷帮你添加绑定代码。打开对应页面的.designer.cs文件,搜索GridView1,看看有没有this.GridView1.DataSourceID = "xxx"这样的代码,要是有,果断删掉。检查后台代码的间接设置:哪怕你没手动写,也可能在某个事件(比如
Page_Init、Page_Load)里,或者基类页面的代码中被设置了DataSourceID。全局搜索整个项目里的GridView1.DataSourceID,找到设置的地方并移除。母版页/用户控件的影响:如果你的GridView在用户控件或者母版页里,要检查父级页面有没有同名的数据源控件,或者是否有其他控件的绑定逻辑影响到了它。
清理缓存和重新编译:有时候旧的编译缓存会导致这种诡异的错误。先删掉项目的
bin和obj文件夹,重启Visual Studio,再重新编译项目试试。
你的GridView标记代码看起来没问题:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" HorizontalAlign="Center" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" OnSorting="GridView1_Sorting" OnSelectedIndexChanged="..."> <!-- 列定义 --> </asp:GridView>
按上面的步骤排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者IT Developer

