- 为表 cftea_docs 增加一个字段 categoryId int,用以表示文档的栏目,为了兼容前面的示例,将该字段的默认值设为 0。
- 同时新建一个表 cftea_categories,字段 categoryId, categoryName,分别表示栏目 Id 和栏目名称。并随意添加一些记录到表中。
SelectCommand,将数据源的 SelectCommand 改为:
SelectCommand="select id, title, content, cftea_docs.categoryId, ISNULL(categoryName, '') as categoryName from cftea_docs left join cftea_categories on cftea_docs.categoryId=cftea_categories.categoryId"
也就是说把 categoryName 也加进去,为了避免出现 NULL,加了 ISNULL 函数。
新加一个数据源
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:MySqlServer %>"
SelectCommand="select categoryId, categoryName from cftea_categories union select 0, ''">
</asp:SqlDataSource>
为了让没有指定 categoryId 的文档不会出错,这里使用 union 为结果增加一个空白的选择项。
为 GridView 新增一个模板列
<asp:TemplateField HeaderText="栏目">
<ItemTemplate>
<%# Eval("categoryName") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="_categoryId" runat="server"
DataSourceID="SqlDataSource2" DataTextField="categoryName" DataValueField="categoryId" SelectedValue="<%# Bind('categoryId') %>">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
目录列表也是绑定了数据源的,同时指定了 SelectedValue,以选择当前文档的栏目,注意在编写该属性时不会弹出自动匹配框,在这里,不用担心会发生错误。
效果如下: