2014-08-31 6 views
1

Мне нужно создать cascading DropDownList in ASP.Net c#.Footer Template DropDownlist in C#

Значение во втором DropDownList зависит от значения, выбранного в первом DropDownList.

мне это нужно в Footer Template в моем GridView.

При выборе значения от первого DropDownList мне нужно заполнить второй DropDownList с выходом запроса sql3 выполнен в First_DDL_SelectedIndexChanged события.

В debug выходное значение выбирается в первом DropDownList и выходной по запросу sql3 являются правильными.

Я попытался использовать это решение, не увенчалась успехом, потому что у меня нет ошибки, но Second_DDL всегда пусто, даже при выборе значения в First_DDL.

Я был бы очень признателен за любую помощь, которую вы можете дать мне в решении этой проблемы.

Вот мой код:

using System; 
using System.Configuration; 
using System.Data; 
using System.Data.Odbc; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Level_Default2 : System.Web.UI.Page 
{ 
    OdbcConnection cn = 
     new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString); 

    DataSet dset; 
    DataTable dt = new DataTable(); 
    DataTable dtCategories = new DataTable(); 
    DataTable dtSubCategories = new DataTable(); 
    OdbcDataAdapter dadapter; 

    private DataTable RetrieveSubCategories(string TRZ) 
    { 
     string sql3 = " SELECT ... where TRZ = ?; "; 

     using (OdbcConnection cn = 
      new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString)) 
     { 
      cn.Open(); 
      using (OdbcCommand cmd = new OdbcCommand(sql3, cn)) 
      { 
       dadapter = new OdbcDataAdapter(cmd); 
       dadapter.SelectCommand.Parameters.AddWithValue(?, TRZ.SelectedItem.ToString().Substring(0, 3)); 
       dadapter.Fill(dtSubCategories); 
      } 
     } 
     return dtSubCategories; 
    } 

    private DataTable RetrieveCategories() 
    { 
     string sql2 = " SELECT ... ; "; 

     using (OdbcConnection cn = 
      new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString)) 
     { 
      cn.Open(); 
      using (OdbcCommand cmd = new OdbcCommand(sql2, cn)) 
      { 
       dadapter = new OdbcDataAdapter(cmd); 
       dadapter.Fill(dtCategories); 
      } 
     } 
     return dtCategories; 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      DropDownList First_DDL = (DropDownList)e.Row.FindControl("First_DDL"); 
      First_DDL.DataTextField = "First_DDL"; 
      First_DDL.DataValueField = "First_DDL"; 
      First_DDL.DataSource = RetrieveCategories(); 
      First_DDL.DataBind(); 

      DropDownList Second_DDL = (DropDownList)e.Row.FindControl("Second_DDL"); 
      Second_DDL.DataTextField = "Second_DDL"; 
      Second_DDL.DataValueField = "Second_DDL"; 
      Second_DDL.DataSource = dtSubCategories; 
      Second_DDL.DataBind(); 
     } 
    } 

    protected void First_DDL_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DropDownList TRZ = (DropDownList)sender; 
     GridViewRow row = (GridViewRow)TRZ.NamingContainer; 
     RetrieveSubCategories(TRZ.SelectedItem.ToString().Substring(0, 3)); //rebind second ddl 

     Response.Write(TRZ.SelectedItem.ToString().Substring(0, 3)); 
    } 

    public DataTable GridViewBind() 
    { 
     using (OdbcConnection cn = 
      new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString)) 
     { 
      string sql1 = " SELECT ... ; "; 

      using (OdbcDataAdapter command = 
       new OdbcDataAdapter(sql1, cn)) 
      { 
       cn.Open(); 
       dset = new DataSet(); 
       dset.Clear(); 
       command.Fill(dset); 
       DataTable dt = dset.Tables[0]; 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 
       return dt; 
      } 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      GridViewBind(); 
     } 
    } 
} 

ответ

0

Попробуйте это:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      DropDownList First_DDL = (DropDownList)e.Row.FindControl("First_DDL"); 
      First_DDL.DataTextField = "First_DDL"; 
      First_DDL.DataValueField = "First_DDL"; 
      First_DDL.DataSource = RetrieveCategories(); 
      First_DDL.DataBind();  
     } 
} 

и это в коде-за:

protected void First_DDL_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList TRZ = (DropDownList)sender; 
    GridViewRow row = (GridViewRow)TRZ.NamingContainer; 
    DRetrieveSubCategories(TRZ.SelectedValue.Substring(0, 3)); //rebind second ddl 

    DropDownList Second_DDL = (DropDownList)row.FindControl("Second_DDL"); 
    Second_DDL.SelectedIndex = 0; 
    Second_DDL.Items.Clear(); 
    Second_DDL.DataTextField = "Second_DDL"; 
    Second_DDL.DataValueField = "Second_DDL"; 
    Second_DDL.DataSource = dtSubCategories; 
    Second_DDL.DataBind(); 
}