在 GridView 的 Cells 中使用 Dropdownlist 时 , 利用如下方法 :
设计 gridView 时 :
< asp:gridView ID = “grd_info” …………………………..>
<Colunms>
………………………some code…………………………..
// Columns[3]
< asp : BoundField DataField ="SYSTEM_ADMIN" HeaderText =" 管理权限 " Visible ="true">
< ItemStyle Width ="100px" />
</ asp : BoundField >
// Columns[ 4 ]
< asp : TemplateField HeaderText =" 管理权限 " Visible ="true">
< ItemTemplate >
< asp : DropDownList ID ="LST_SYSTEM_ADMIN" runat ="server" Width ="100px">
< asp : ListItem Value ="0"> No </ asp : ListItem > // 定义 Dropdownlist 的下拉条 1
< asp : ListItem Value ="1"> Yes </ asp : ListItem > // 定义 Dropdownlist 的下拉条 2
</ asp : DropDownList >
</ ItemTemplate >
</ asp : TemplateField >
………………………some code…………………………..
</Colunms>
< /asp:gridView
绑定 DB 时 : [C#]
this .grd_info.DataSource = _d0402.getEmp_info(dptNo); // 检索 DB
grd_info.Columns[4].Visible = true ;
grd_info.Columns[3].Visible = true ;
this .grd_info.DataBind();
// 按行为每个 Dropdownlist 设定值 .
foreach ( GridViewRow grdRow in grd_info.Rows)
{
try
{
(( DropDownList )(grdRow.Cells[4].FindControl( "LST_SYSTEM_ADMIN" ))).SelectedIndex = Convert .ToInt16(grdRow.Cells[3].Text);
}
catch ( Exception ex)
{
ExceptionHandler .HandleException(ex);
}
}
grd_info.Columns[3].Visible = false ;
基本思想 Columns[3] 和 DB 绑定 , 而 Columns[ 4 ] 则依据 Columns[3] 的改变而改变 . 也就是说 Columns[ 4 ] 并没有和 DB 绑定 , 所以在显示时 , 根据需要使 Columns[3] . Visual 为 false, 而 Columns[ 4 ] . Visual 的值为 true.
总结 :
1. 用一临时行 ( Columns[3] ) 来存从 DB 中检索出来的值
2. 用不与 DB 绑定的 Dropdownlist 和临时行绑定 , 显示 DB 内容 .
3. 设置临时行不可见 , 而 Dropdownlist 可见 .
4. 按行为 Dropdownlist 设定值 .
当然,还有其他方法 , 有待总结 .
---------------------------------------------------------------------------------
2008年 11 月 12 日
全文完.