向GridView中DropDownList控制项添加OnSelectedIndexChanged实现级联动 (转)

来源:互联网 发布:如何开通手机淘宝花呗 编辑:程序博客网 时间:2024/06/05 04:58

转自 http://www.cnblogs.com/andhm/archive/2010/05/09/1731031.html

 

OnSelectedIndexChanged事件直接关联服务端的方法即可,没有必要去关联一个button,在SelectedIndexChanged事件是可以通过sender找到这个下拉框事件,通过两次parent找到当前的Gridviewrow,在findcontrol找到该行的另一个下拉框,绑定数据即可。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
序号
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblIndex" runat="server" Text="<%# Container.DataItemIndex %>"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
合約編號
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddlContractNO" runat="server" AutoPostBack=true OnSelectedIndexChanged="ddlContractNO_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
料号
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddlMaterielNo" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(this.Page.IsPostBack)
return;
BindData();
}

protected void BindData()
{
ArrayList al = new ArrayList();
for (int i = 0; i < 15; i++)
{
al.Add(i);
}
this.GridView1.DataSource = al;
this.GridView1.DataBind();
}


/// <summary>
/// 获取所有的合同
/// </summary>
/// <returns></returns>
protected List<Contract> GetAllContract()
{
List<Contract> list = new List<Contract>();
for (int i = 0; i < 5; i++)
{
Contract contract = new Contract();
contract.Id = i + 1;
contract.Name = "contract" + contract.Id;
contract.No = "No" + contract.Id;
list.Add(contract);
}
return list;
}

protected List<Materiel> GetAllMaterielByContractNo(string contractNo)
{
List<Materiel> list = new List<Materiel>();
for (int i = 0; i < 10; i++)
{
Materiel materiel = new Materiel();
materiel.Id = i + 1;
materiel.Name = "materiel" + contractNo + materiel.Id;
materiel.No = contractNo + materiel.Id;
materiel.ContractNo = contractNo;
list.Add(materiel);
}
return list;
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType != DataControlRowType.DataRow)
return;
DropDownList ddlContractNO = ((DropDownList)e.Row.Cells[1].FindControl("ddlContractNO"));
ddlContractNO.DataSource = GetAllContract();
ddlContractNO.DataTextField = "No";
ddlContractNO.DataBind();
ddlContractNO.SelectedIndex = 0;
BindMaterielDropDownList(e.Row, ddlContractNO.SelectedValue);
}

protected void ddlContractNO_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddlContractNO = (DropDownList)sender;
GridViewRow row = (GridViewRow)ddlContractNO.Parent.Parent;
BindMaterielDropDownList(row, ddlContractNO.SelectedValue);
}

protected void BindMaterielDropDownList(GridViewRow row,string contractNo)
{
DropDownList ddlMaterielNo = (DropDownList)row.Cells[2].FindControl("ddlMaterielNo");
ddlMaterielNo.DataSource = GetAllMaterielByContractNo(contractNo);
ddlMaterielNo.DataTextField = "No";
ddlMaterielNo.DataBind();
}
}

原创粉丝点击