Рейтинг:
2
OriginalGriff
Не. Form2 не должен знать, что Form1 существует, а тем более какие методы он содержит. Вместо этого он должен использовать события, чтобы сообщить Form1, что что-то нужно сделать.
Как именно, зависит от "отношения" между этими двумя формами.
Взгляните на них, один из них будет соответствовать вашим обстоятельствам.
Форма, которая создает экземпляр другого:
MyForm mf = new MyForm();
mf.Show();
Это "родитель", другая форма - "Ребенок".
(Это не подразумевает никаких формальных отношений MDI)
Передача информации между двумя формами, Часть 1: Родитель-Ребенок[
^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[
^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[
^]
Рейтинг:
2
RickZeeland
Существует несколько способов, но один из самых простых-создать Статический класс, видеть: https://www.dotnetperls.com/static[^]
Учебник C# Static[^]
Быстрый и грязный способ-использовать программу статического класса, которая уже присутствует в проекте Winforms.
[no name]
Но я попробовал статический класс,но не работает, он выбрасывает этот код ошибки"Ошибка 4 не может создать экземпляр статического класса "
RickZeeland
Правильно, вы не можете создавать экземпляры, просто используйте статический класс напрямую.
Внимательно посмотрите на примеры Dotnetperls :)
[no name]
Но я не пытаюсь передать пустой класс, я пытаюсь вызвать метод, который обрабатывает нестатические данные из textbox, datagridview.
RickZeeland
Вы думаете слишком объектно-ориентированным, думайте о статическом классе как о сумке, в которую обе формы могут поместить свои данные и вынуть их тоже.
Рейтинг:
1
Maciej Los
Вы смешали несколько вещей!
1. Двигаться arka_data
в отдельные файлы
2. найдите файл Program.cs и добавьте эту строку:
public static List<arka_data> dta;
3. В конструкторе form1 :
public Form1()
{
InitializeComponent();
Program.dta = new List<arka_data>();
}
4. Где-то после... заполните свой список ДТА.
public void mbushe()
{
for (int i = 0; i < dataTable.Rows.Count; i++)
{
arka_data ad = new arka_data();
ad.NR = int.Parse(txtnrfatures.Text);
ad.VLERATVSHTOTAL = float.Parse( textBox1.Text);
ad.BARKODI = int.Parse(dataTable.Rows[i][0].ToString());
ad.EMERTIMI = dataTable.Rows[i][1].ToString();
ad.SASIA = int.Parse(dataTable.Rows[i][2].ToString());
ad.CMIMI = int.Parse(dataTable.Rows[i][3].ToString());
ad.TVSH = int.Parse(dataTable.Rows[i][4].ToString());
ad.NENTOTALI = float.Parse(txttotali.Text);
ad.ZBRITJA = float.Parse(txtzbritja.Text);
ad.TOTALI = float.Parse(totali.Text);
ad.KOHA = DateTime.Now;
ad.KASIERI = lbluser.Text;
ad.KLIENTI = cmbklienti.Text;
ad.VLERAETVSH = float.Parse(dataTable.Rows[i][7].ToString());
ad.VLERAPATVSH = float.Parse(dataTable.Rows[i][6].ToString());
ad.NRATIKUJVE = int.Parse(lblnumri.Text);
ad.TOTALIPCS = float.Parse(dataTable.Rows[i][5].ToString());
//and finally
Program.dta.Add(ad);
}
4. Если вы хотите отредактировать одну запись в Form2, вам нужно создать конструктор, который принимает
arka_data
класс как параметр. См. решение № 2 по
OriginalGriff.
[no name]
Как теперь я могу хранить данные в sql DB, используя эти данные? Какой код я должен добавить, чтобы использовать программу.dta собранные данные. и вместо этого
txtnrfatures.Текст
для использования программы".ДТА.НР"
SqlCommand cmd = new SqlCommand("insertfaturimi", conn);
УМК.Свойство Commandtype = Значение Commandtype.Хранимая процедура;
cmd.параметры.Четкий();
cmd.параметры.Add(new SqlParameter("@nrfatures", int.Parse(txtnrfatures.Текст)));
cmd.параметры.Добавить(новый SqlParameter ("@klienti", cmbklienti.Text));
cmd.параметры.Добавить(новый SqlParameter ("@pagesa", faturimi));
Maciej Los
program.dta.NR
не существует! Program.dta
существует!
Также arka_data ad = Program.dta.Where(x=> x.NR==some_value).SingleOrDefault()
существует!
Итак, вы можете использовать ad
теперь переменная.
[no name]
Как обратиться в form2 к program.dta и использовать его?Потому что я пытаюсь создать новый экземпляр program.dta, но не работаю
Также как очистить program.dta после вставки earch? Потому что эта программа должна вставлять много данных
Maciej Los
Вам не нужно создавать новый экземпляр Program.dta! Представьте, что ваши данные хранятся в переменной.
Извините, но я не понимаю остальную часть вашего вопроса.
[no name]
Хорошо, как обратиться к этому варианту во 2-м классе. Таким образом, чтобы иметь возможность дать из этого variabile каждый параметр
cmd.параметры.Add(new SqlParameter ("@nrfatures", //variabile_parameter1);
cmd.параметры.Add(new SqlParameter ("@klienti", //variabile_parameter1);
cmd.параметры.Add(new SqlParameter ("@pagesa", //variabile_parameter1);
Как я должен обратиться к этому варианту во 2-й форме? Спасибо снова
Maciej Los
Вы читали оригинальные статьи Гриффа? Там есть полный учебник.
Как я уже упоминал ранее, вы должны создать параметризованный конструктор Form2. Тогда вы должны передать ему переменную "ad"!
[no name]
@Maciej Los, что-то не так с методом void mbushe, потому что никакие данные не собираются (нулевое значение). Я проверил еще раз, но все еще отсутствовал
[no name]
Я ставлю одну точку останова или строку Program.dta.Add(ad)в метод void и при появлении ошибки проверяю, нет ли собранных данных , только 0.0, null и для даты{1/1/0001 12:00:00 AM} вместо datetime.теперь ценность. Что-то не так с методом пустоты
Maciej Los
Что за ошибка? Что такое сообщение об ошибке?