У меня есть 10 текстовых полей txt_Address1, txt_Address2 ... txt_Address10 и 10 столбцов для хранения их значений в базе данных, то есть Address1, Address2 ... Address10. Теперь я хочу получить каждое значение текстового поля и сохранить его в соответствующем столбце. Для этого вместо того, чтобы писать 10 строк кода для каждого текстового поля, я хочу сделать это по циклу FOR. Может ли кто-нибудь предложить мне подходящее решение?Получение значений текстового поля через цикл
ответ
Просто укажите текстовое поле в массиве TextBox;
TextBox txt1 = new TextBox();
TextBox txt2 = new TextBox();
TextBox txt3 = new TextBox();
TextBox txtN = new TextBox();
TextBox[] allTextBoxes = new TextBox[] { txt1, txt2, txt3, txtN };
foreach(TextBox item in allTextBoxes)
{
StoreValue(item.Text);
}
ИЛИ вы можете использовать
List<TextBox> lst = new List<TextBox>();
lst.Add(txt1);
lst.Add(txt2);
lst.Add(txt3);
foreach(TextBox item in lst)
{
StoreValue(item.Text);
}
Но в этом случае мне также нужно объявить 10 текстовых полей для каждого из моих текстовых полей. Может ли это быть сделано циклом FOR вместо цикла foreach? –
уверен, что вы можете создать текстовое поле динамически и поместить его в форму: – lostincomputer2
Список
Вы можете поместить их в список, и перебирать этот список ...
Edit: Кажется lostincomputer ответил двадцать секунд впереди меня ... такой же ... обе будут работать
Когда вы создаете текстовые поля, храните их в коллекции
List<TextBox> textboxControls = new List<TextBox>();
Затем, когда вы создаете их, добавить их в коллекцию
textboxControls.Add(control);
После этого вы можете петля над ними, и получить доступ к их значения
foreach(var control in textboxControls)
DoSomethingWithText(control.Text);
Или вы можете получить к ним доступ из формы без перечня:
foreach(Control control in MyForm.Controls)
{
if(control is TextBox)
{
//do what you want
}
}
Если у вас их есть в группеBox
foreach(Control control in myGroupBox.Controls)
{
if(control is TextBox)
{
//do what you want
}
}
Надеюсь, это поможет!
Или с циклом:
//Controls is the Controls collection of the form
for(int i=0;i<Controls.Count;i++)
{
if(Controls[i] is TextBox)
{
//do what you want
}
}
В этом случае вам также нужно будет использовать 'control' как' TextBox'. Возможно, лучше будет отличить сначала «управление как текстовое поле» и выполнить нулевую проверку. Таким образом, вы бросаете только один раз. –
Перед тем, как тратить (отходы) время написание кода для работы с базой данных разработаны таким образом, вы должны изменить дизайн вашей базы данных. Не стоит иметь 10 столбцов в таблице для 10 адресов. У вас должно быть место от 0 до бесконечности. Посмотрите, как создать реляционную базу данных.
В основном:
Таблица: Клиент
CustomerID
Name
Etc.
Таблица: CustomerAddresses
CustomerID
Address
City
State
Zip
Шаг1: вы можете пройти через все Form
кон троллей и учтите только элементы управления TextBox
.
Шаг 2: от всех форм TextBox
управления фильтровать TextBox-х, которые содержат Name
как "txt_Address%
" здесь %
canbe ничего подобного 1,2,3,4 ... и т.д.,
код как. ниже:
List<String> txtValues=new List<string>();
foreach (var control in this.Controls)
{
if((control is TextBox) && (((TextBox) control).Name.Contains("txt_Address")))
txtValues.Add(((TextBox) control).Text.ToString());
}
Вы можете использовать Controls.Find(), как это:
for (int i = 1; i <= 10; i++)
{
Control[] matches = this.Controls.Find("txt_Address" + i.ToString(), true);
if (matches.Length > 0 && matches[0] is TextBox)
{
TextBox tb = (TextBox)matches[0];
// ... do something with "tb" ...
}
}
Нужно ли добавить пространство имен для Controls.Find()? Если да, то пожалуйста, скажите мне. Потому что я не могу найти метод Find в intellicense. –
Вы не указали ... WinForms ?, WebForms ?, WPF ?, что-то еще? –
Я говорю о WebForms. –
var columns = new Dictionary<string, string>();
for (int i = 1; i <= 10; i++) columns.Add("Address" + i, string.Empty);
var textBoxes = Controls.Find("txt_Address", true).Where(t => t is TextBox).ToList();
columns.ToList().ForEach(c =>
{
var index = c.Key.Replace("Address", string.Empty);
var textBox = textBoxes.FirstOrDefault(t => index.Equals(t.Name.Replace("txt_Address", string.Empty)));
if (textBox != null) columns[c.Key] = textBox.Text;
});
- 1. сумма значений текстового поля через цикл
- 2. Получение входных значений из текстового поля
- 3. Получение значений текстового поля в массиве javascript
- 4. Проводка двух значений текстового поля через ajax
- 5. умножение значений текстового поля
- 6. Визуализация значений текстового поля
- 7. Получение значения текстового поля
- 8. Получение значения текстового поля
- 9. JQuery - Найти значения текстового поля в таблице через цикл $ .each
- 10. Получение значений текстового поля из браузера CefSharp с помощью javascript
- 11. Получение значений текстового поля и отправка его на php
- 12. получение значений текстового поля из настраиваемого вида предупреждения
- 13. Получение значений из текстового поля и их правильное хранение
- 14. Получение значений из текстового поля для сохранения в виде PDF
- 15. JSP, Получение значений из Текстового поля в другую JSP страницу
- 16. C# Получение исходной темы для установки значений текстового поля
- 17. ASP.Net - Сортировка значений текстового поля
- 18. Laravel Добавление значений текстового поля
- 19. объединение двух значений текстового поля
- 20. Получение текстового поля вкладки TabLayout
- 21. Получение значения из текстового поля
- 22. получение строки из текстового поля
- 23. Получение значения из текстового поля
- 24. Получение дескриптора пустого текстового поля
- 25. получение статистики из текстового поля
- 26. Получение значения из текстового поля
- 27. Codeigniter: получение значения текстового поля
- 28. Получение значения для текстового поля из другого текстового поля UIViewController
- 29. цикл через текстовые поля C#
- 30. Несколько значений текстового поля в базе данных
вы можете создать массив и добавить все txt_Ad ... к нему. TextBox [] textBoxes = new TextBox [] {txt_Addr1, txt_Addr2, ...}. И перейдем к этому. – hawk
см. Мой ответ, вы можете добавить все текстовое поле в список или добавить его в массив и закодировать его, TextBox является ссылочным типом, что означает, что объявление TextBox a = txt_address10 не делает его копию, вместо этого оно создает указатель на txt_address10 – lostincomputer2
Убедитесь, что вы действительно хотите это сделать. Люди рассказывают вам, как это выглядит, но это похоже на плохой дизайн базы данных и, как следствие, трату времени. См. Мой ответ ниже. – user1646737