2013-11-21 1 views
0

Я делаю панель пользовательского интерфейса и имею динамические данные для ввода интерфейса. Для этого я хочу, чтобы фильтр SQL-запрос основывался на выбранном пользователем значении нескольких запросов SQL.Получить выбранное значение динамически сгенерированного раскрывающегося списка/флажка в C#

Для прототипа: я создал панель и получили данные не возникало никаких проблем, но так как я не знаю, сколько фильтров у меня будет, пока я смотрю на первый запрос я сделал checkboxes и dropdowns на фильтре динамически.

Проблема у меня есть, я не могу получить доступ к выбранным пользователем значениям в выпадающих меню или флажках.

Я назначил уникальные идентификаторы для каждого элемента, поэтому самым быстрым решением будет эквивалент C# getElementByID?

Я отправлю некоторые из кода ниже:

protected string SQConnWhere(string TableName = "Nonya", string FieldName = "Error!!!", int i=0) 
{ 
    string ConnectionString = "real string removed"; 
    cmdText = @"SELECT DISTINCT " + FieldName + " FROM tablenamechangedfromrealonetoprotectthe innocent"; 

    Label myLabel = new Label(); 
    Label myLabelA = new Label(); 
    CheckBox myCheckBox = new CheckBox(); 
    DropDownList myList = new DropDownList(); 

    myList.ID  = "myList"  + i; 
    myCheckBox.ID = "myCheckBox" + i; 
    myLabel.ID = "myLabel" + i; 
    myLabelA.ID = "myLabelA" + i; 

    myLabel.Text = FieldName; 
    PlaceHolder1.Controls.Add(myLabel); 
    PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
    PlaceHolder1.Controls.Add(myList); 
    myCheckBox.Text = "Use This Field in Filter?"; 

    using (SqlConnection conn = new SqlConnection(ConnectionString)) 
    { 
     try 
     { 
      SqlDataAdapter adapter = new SqlDataAdapter(cmdText, conn); 
      DataSet ds2 = new DataSet(); 
      adapter.Fill(ds2);          

      myList.DataSource = ds2;      
      myList.DataTextField = FieldName; 
      myList.DataBind(); 
      ViewState["Data"] = ds2;     
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("{0} Exception caught.", e); 
     } 
    }    

    PlaceHolder1.Controls.Add(myCheckBox); 
    PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
    //May not need this? 
    //filterList.Add(FieldName); 

    myLabelA.Text = cmdText;       
    PlaceHolder1.Controls.Add(myLabelA); 
    PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
    PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 


    //myCheckBox.CheckedChanged += new EventHandler(UpdatemyCheckBox); 
    //pnlCheckList.Controls.Add(myCheckBox); 

    // register the control to cause asynchronous postbacks 
    //ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(myCheckBox); 

    //Label4.Text = FieldName; 
    return cmdText; 
} 

P.S. Это мой первый пост, несмотря на долгое время просмотра веб-сайта, спасибо за всю помощь до сих пор !!!

+1

'поймать { }' _running прочь screaming_ –

+0

[Control.FindControl] (HTTP: //msdn.microsoft.com/en-us/library/486wc64h(v=vs.110).aspx), возможно? – helix

+0

Вы можете создавать элементы управления динамически, хотя я не уверен, действительно ли это вам нужно. Но вам нужно воссоздать все динамические элементы управления для каждой обратной записи в 'Page_Load' не позднее. Затем вы можете использовать 'PlaceHolder1.FindControl (« ControlID »)' для получения ссылки. –

ответ

0

я решил его с помощью

ManualSQConnWhere(DropDownList1, myTable, "Run_ID", CheckBox1); 
    ManualSQConnWhere(DropDownList2, myTable, "Job_Status", CheckBox2); 
    ManualSQConnWhere(DropDownList3, myTable, "Job_Plan", CheckBox3); 

    protected string ManualSQConnWhere(DropDownList myList, string TableNameWeb2, string FieldName, CheckBox myCheckBox) 
    { 
     string ConnectionString = "Data Source=xxxxx;Initial Catalog=xxxxx;Integrated Security=True"; 
     cmdText = @"SELECT DISTINCT " + FieldName + " FROM " + TableNameWeb2; 
     DataSet dbWeb2 = new DataSet(); 
     myList.AutoPostBack = false; 
     //myList.ViewStateMode = ViewStateMode.Enabled; 

     using (SqlConnection conn = new SqlConnection(ConnectionString)) 
     { 
      try 
      { 
       SqlDataAdapter adapter = new SqlDataAdapter(cmdText, conn); 
       adapter.Fill(dbWeb2); 

       ViewState["Data"] = dbWeb2; 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("{0} Exception caught.", e); 
      } 
     } 
     myList.AppendDataBoundItems = true; 
     myList.DataSource = dbWeb2; 
     myList.DataTextField = FieldName; 
     myList.Items.Add(new ListItem("<None Selected>", string.Empty)); 

     if (dbWeb2.Tables.Count > 0) 
     { 
      myList.DataBind(); 
     } 
     else 
     { 
      Label1.Text = "Error on the SQL Query" + cmdText; 
      return cmdText; 
     } 

     myCheckBox.Text = FieldName; 
     return cmdText; 
    } 

Этот код propogated на выпадающие и я просто вошел теги для них