Я делаю панель пользовательского интерфейса и имею динамические данные для ввода интерфейса. Для этого я хочу, чтобы фильтр 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. Это мой первый пост, несмотря на долгое время просмотра веб-сайта, спасибо за всю помощь до сих пор !!!
'поймать { }' _running прочь screaming_ –
[Control.FindControl] (HTTP: //msdn.microsoft.com/en-us/library/486wc64h(v=vs.110).aspx), возможно? – helix
Вы можете создавать элементы управления динамически, хотя я не уверен, действительно ли это вам нужно. Но вам нужно воссоздать все динамические элементы управления для каждой обратной записи в 'Page_Load' не позднее. Затем вы можете использовать 'PlaceHolder1.FindControl (« ControlID »)' для получения ссылки. –