在网格视图中更改下拉列表项选择单选按钮
change dropdown list item selecting radio button in grid view
picture如果我 selected 男性单选按钮然后在下拉列表中显示不同的选项如果我 select 女性然后在 RowDataBound 方法的帮助下在下拉列表中显示不同的选项。
好的,事实上很多技巧和问题是当您加载现有的数据网格时,我们还必须设置单选按钮选择和下拉列表。
所以,假设我们有这个网格:
<asp:GridView ID="GHotels" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" cssclass="table" OnRowDataBound="GHotels_RowDataBound" >
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="Gender">
<ItemTemplate>
<asp:RadioButtonList ID="RGender" runat="server"
RepeatDirection="Horizontal"
Text='<%# Eval("Gender") %>' >
<asp:ListItem>M</asp:ListItem>
<asp:ListItem>F</asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Option">
<ItemTemplate>
<asp:DropDownList ID="cboOption" runat="server"
DataValueField="ID"
DataTextField="Feature" >
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
加载网格的代码是这样的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GHotels.DataSource = MyRst("SELECT * FROM tblHotelsA ORDER BY HotelName");
GHotels.DataBind();
}
}
public DataTable MyRst(string strSQL)
{
DataTable rstData = new DataTable();
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
cmdSQL.Connection.Open();
rstData.Load(cmdSQL.ExecuteReader());
}
}
return rstData;
}
现在我们有了这个:
但是,请注意我们仍然需要加载单选按钮列表,并且还要设置组合框以提供一组不同的选择。
因此,我们将这段代码添加到行数据绑定事件中。
protected void GHotels_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView gData = e.Row.DataItem as DataRowView;
// based on Gender fill cbo box
string strSQL = "SELECT ID, Feature FROM tblHotelOptions ";
if (gData["Gender"].ToString() == "M")
{
strSQL += "WHERE Gender = 'M'";
}
else
{
strSQL += "WHERE Gender = 'F'";
}
strSQL += " ORDER BY Feature";
DropDownList cboOption = e.Row.FindControl("cboOption") as DropDownList;
cboOption.DataSource = MyRst(strSQL);
cboOption.DataBind();
cboOption.Items.Insert(0, new ListItem("Select", "0"));
if (gData["HotelOption"] != null)
cboOption.SelectedValue = gData["HotelOption"].ToString();
}
}
因此,对于每个网格行,我们处理数据行信息,并有条件地加载带有基于性别的选项的下拉列表。
现在,这适用于“加载”,但现在我们需要添加事件和代码以用于更改单选按钮选项。
因此,在标记中,我们将此事件添加到单选按钮:
我们必须使用标记和 intel-sense 弹出创建新事件的选项,如下所示:
因此,我们在单选按钮列表中添加了 autopostback=true,并选择了更改事件。
所以,现在当您更改单选选项时,我们需要 运行 代码来更改下拉列表选项。
因此,该代码可以如下所示:
protected void RGender_SelectedIndexChanged(object sender, EventArgs e)
{
RadioButtonList rBtn = sender as RadioButtonList;
GridViewRow gRow = rBtn.NamingContainer as GridViewRow;
string strSQL = "SELECT ID, Feature FROM tblHotelOptions ";
if (rBtn.SelectedItem.Text == "M")
// based on Gender fill cbo box
{
strSQL += "WHERE Gender = 'M'";
}
else
{
strSQL += "WHERE Gender = 'F'";
}
strSQL += " ORDER BY Feature";
DropDownList cboOption = gRow.FindControl("cboOption") as DropDownList;
cboOption.DataSource = MyRst(strSQL);
cboOption.DataBind();
cboOption.Items.Insert(0, new ListItem("Select", "0"));
}
事实上,代码与我们加载网格的方式非常相似。
picture如果我 selected 男性单选按钮然后在下拉列表中显示不同的选项如果我 select 女性然后在 RowDataBound 方法的帮助下在下拉列表中显示不同的选项。
好的,事实上很多技巧和问题是当您加载现有的数据网格时,我们还必须设置单选按钮选择和下拉列表。
所以,假设我们有这个网格:
<asp:GridView ID="GHotels" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" cssclass="table" OnRowDataBound="GHotels_RowDataBound" >
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="Gender">
<ItemTemplate>
<asp:RadioButtonList ID="RGender" runat="server"
RepeatDirection="Horizontal"
Text='<%# Eval("Gender") %>' >
<asp:ListItem>M</asp:ListItem>
<asp:ListItem>F</asp:ListItem>
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Option">
<ItemTemplate>
<asp:DropDownList ID="cboOption" runat="server"
DataValueField="ID"
DataTextField="Feature" >
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
加载网格的代码是这样的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GHotels.DataSource = MyRst("SELECT * FROM tblHotelsA ORDER BY HotelName");
GHotels.DataBind();
}
}
public DataTable MyRst(string strSQL)
{
DataTable rstData = new DataTable();
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
cmdSQL.Connection.Open();
rstData.Load(cmdSQL.ExecuteReader());
}
}
return rstData;
}
现在我们有了这个:
但是,请注意我们仍然需要加载单选按钮列表,并且还要设置组合框以提供一组不同的选择。
因此,我们将这段代码添加到行数据绑定事件中。
protected void GHotels_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView gData = e.Row.DataItem as DataRowView;
// based on Gender fill cbo box
string strSQL = "SELECT ID, Feature FROM tblHotelOptions ";
if (gData["Gender"].ToString() == "M")
{
strSQL += "WHERE Gender = 'M'";
}
else
{
strSQL += "WHERE Gender = 'F'";
}
strSQL += " ORDER BY Feature";
DropDownList cboOption = e.Row.FindControl("cboOption") as DropDownList;
cboOption.DataSource = MyRst(strSQL);
cboOption.DataBind();
cboOption.Items.Insert(0, new ListItem("Select", "0"));
if (gData["HotelOption"] != null)
cboOption.SelectedValue = gData["HotelOption"].ToString();
}
}
因此,对于每个网格行,我们处理数据行信息,并有条件地加载带有基于性别的选项的下拉列表。
现在,这适用于“加载”,但现在我们需要添加事件和代码以用于更改单选按钮选项。
因此,在标记中,我们将此事件添加到单选按钮:
我们必须使用标记和 intel-sense 弹出创建新事件的选项,如下所示:
因此,我们在单选按钮列表中添加了 autopostback=true,并选择了更改事件。
所以,现在当您更改单选选项时,我们需要 运行 代码来更改下拉列表选项。
因此,该代码可以如下所示:
protected void RGender_SelectedIndexChanged(object sender, EventArgs e)
{
RadioButtonList rBtn = sender as RadioButtonList;
GridViewRow gRow = rBtn.NamingContainer as GridViewRow;
string strSQL = "SELECT ID, Feature FROM tblHotelOptions ";
if (rBtn.SelectedItem.Text == "M")
// based on Gender fill cbo box
{
strSQL += "WHERE Gender = 'M'";
}
else
{
strSQL += "WHERE Gender = 'F'";
}
strSQL += " ORDER BY Feature";
DropDownList cboOption = gRow.FindControl("cboOption") as DropDownList;
cboOption.DataSource = MyRst(strSQL);
cboOption.DataBind();
cboOption.Items.Insert(0, new ListItem("Select", "0"));
}
事实上,代码与我们加载网格的方式非常相似。