<ASP:DATAGRID id="MyDataGrid" runat="server" Width="667px" Font-Size="10pt" AutoGenerateColumns="False"
HeaderStyle-BackColor="darkred" HeaderStyle-ForeColor="white" Height="160px">
<HeaderStyle ForeColor="White" BackColor="DarkRed"></HeaderStyle>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<input type="checkbox" name="allbox" οnclick="SelectAll();"/>
<font face="Webdings" color="white" size="4">选择</font>
<HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="SelectCheckBox" οnclick="javascript:Select(this);" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="NAME" HeaderText="文字说明"></asp:BoundColumn>
< asp:TemplateColumn>
<HeaderTemplate>
类型
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="subtype" runat="server" Width=170 DataSource='<%# GetATypes(DataBinder.Eval(Container.DataItem,"NAME").ToString())%>' DataTextField="NAME" DataValueField="ID" />
< /ItemTemplate>
</asp:TemplateColumn>
</Columns>
</ASP:DATAGRID><br>
DataSource='<%# GetATypes(DataBinder.Eval(Container.DataItem,"NAME").ToString())%>'
DataBinder.Eval(Container.DataItem,"NAME") NAME是绑定到这个DataGrid的数据源表中的列名 如果下拉框要直接绑定到其中一个列就可以直接写成
DataSource='<%# DataBinder.Eval(Container.DataItem,"YourColumnName")%>
而如果想根据某列的值来判断绑定到相应的表则需要自己写一个方法(我的例子中的GetATypes()就是自己定义的)然后调用它,此方法的返回值是一个DataView
代码如下:
public DataView GetATypes(string type)
{
//根据你的需要修改相应的代码
string tableName = sqlLibrary.GetTableName(type);
string sqlStr = "SELECT '-1' AS ID ,'全部' AS NAME FROM " + tableName + " UNION SELECT * FROM " + tableName;
ds = conn.GetDataSet(sqlStr);
dv = ds.Tables[0].DefaultView;
//dv.RowFilter = "id = " + id + "or id = 0" ;
return dv;
}
DataTextField="NAME" DataValueField="ID"
这里的
NAME和ID是绑定到这个下拉框的表中的列名(注意不是绑定到DataGrid表中的列名)
下拉框中显示的值是DataTextField绑定的值而每个值都会有一个索引值DataValueField
你可根据自己的需要从下拉框中取得值或者其对应的索引值。