GridView中DropDownList数据绑定问题求助
解决GridView中DropDownList无数据及字段绑定灰色问题
看来你在给GridView配置分类下拉框时遇到了两个小麻烦——字段绑定选项灰色不可用,还有DropDownList(DDL)没显示任何分类数据。我来帮你一步步搞定:
一、让DropDownList显示所有分类数据
你的DDL现在是空的,因为它没有绑定专门的分类数据源。GridView的主数据源是关联Files和Categories后的结果,只能拿到当前文件对应的分类,而我们需要所有分类来填充下拉框,所以得给DDL单独加一个数据源:
1. 添加分类数据源
在页面中(比如GridView上方)添加一个SqlDataSource,专门从Categories表获取所有分类:
<asp:SqlDataSource ID="categoriesDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:你的数据库连接字符串 %>" SelectCommand="SELECT CategoryID, Description FROM Categories ORDER BY Description"> </asp:SqlDataSource>
记得把你的数据库连接字符串替换成你实际用的连接字符串名称(和filenameTableDataSource的保持一致)。
2. 绑定DropDownList到分类数据源
修改GridView中TemplateField里的DDL配置,绑定刚创建的数据源,并设置显示文本和值字段,同时绑定当前文件的CategoryID来默认选中对应分类:
<asp:TemplateField HeaderText="Category" SortExpression="Category"> <!-- 查看模式下显示分类名称(可选,更友好) --> <ItemTemplate> <asp:Label ID="lblCategory" runat="server" Text='<%# Eval("Category") %>'></asp:Label> </ItemTemplate> <!-- 编辑模式下显示下拉框 --> <EditItemTemplate> <asp:DropDownList ID="ddlCategory" runat="server" DataSourceID="categoriesDataSource" DataValueField="CategoryID" <!-- 存到数据库的ID --> DataTextField="Description" <!-- 显示给用户的分类名称 --> SelectedValue='<%# Bind("CategoryID") %>'> <!-- 默认选中当前分类 --> </asp:DropDownList> </EditItemTemplate> </asp:TemplateField>
如果你希望在查看模式下也显示下拉框,就把DDL放在ItemTemplate里,去掉EditItemTemplate即可,但通常查看时用标签更直观。
二、解释字段绑定选项灰色的问题
你之前按照MSDN指南操作时,字段绑定选项呈灰色,这其实是正常现象:
- 因为你已经把GridView的
AutoGenerateColumns设为False,并且手动用BoundField和TemplateField定义了所有列。 - 当GridView手动定义列后,自动字段绑定的向导就会被禁用(灰色),因为系统认为你已经完全掌控了列的配置,不需要自动生成。
所以这个“问题”不需要解决,你现在手动配置列的方式是正确的。
最后检查点
- 确保
categoriesDataSource的连接字符串正确,能正常访问Categories表。 - 主数据源的SQL语句已经包含
Files.CategoryID,所以Bind("CategoryID")才能正常工作(你的SQL语句里已经有这个字段,没问题)。
这样配置后,DDL就能显示所有分类,编辑时也能正确选中当前分类,字段绑定灰色的疑问也解决啦!
内容的提问来源于stack exchange,提问作者Olliecycles
相关产品推荐
相关产品推荐

