Я пытаюсь создать глобальный класс Reset
, который сбросит все значения в форме и вызывается начальным методом этой формы. Я динамически передаю имя формы в класс Reset
и сброшу все значение элемента управления и назвал метод этой формы. Вот мой код ...
Сброс КлассКак назначить какое-либо значение элементу управления посредством вызова метода из другого класса в C#
class Reset
{
public void BlankAll(string FormName, Panel pnl, string UserName)
{
foreach (Control ch in pnl.Controls) // this foreach loop reset the values of each control, it's working fine. So don't bother about it.
{
if (ch.Name.Substring(ch.Name.Length - 3) != "_NI")
{
if (ch is TextBox || ch is ComboBox)
ch.Text = string.Empty;
else if (ch is DateTimePicker)
ch.Text = DateTime.Now.ToShortDateString();
else if (ch is DataGridView)
{
DataGridView dgv = (DataGridView)pnl.Controls.Find(ch.Name, true).SingleOrDefault();
for (int i = dgv.Rows.Count - 1; i > 0; i--)
{
dgv.Rows.RemoveAt(i);
}
for (int i = 1; i < dgv.Columns.Count; i++)
{
dgv.Rows[0].Cells[i].Value = string.Empty;
}
}
}
}
Type tp = Type.GetType("HealthClub." + FormName); // HealthClub is NameSpace
object myobj = Activator.CreateInstance(tp);
MethodInfo method = myobj.GetType().GetMethod("FillValues"); // FillValues is the method which I am trying to call
object[] parametersArray = new object[] { UserName };
method.Invoke(myobj, parametersArray);
}
}
Вот FillValues
метод в Form1
, который я хочу Invoke из Reset
класса
public void FillValues(string UserName)
{
DataTable DT;
SqlCommand cmd = new SqlCommand();
try
{
cmd.Connection = Connections.Connection[UserName];
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "TrainerMaster_pro";
cmd.Parameters.AddWithValue("Option", "FillValues".Trim());
if (Connections.Connection[UserName].State == ConnectionState.Closed)
Connections.Connection[UserName].Open();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DT = new DataTable();
adp.Fill(DT);
lblId___.Text = DT.Rows[0][0].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
cmd.Parameters.Clear();
cmd.Dispose();
Connections.Connection[UserName].Close();
}
}
Теперь я пытаюсь сбросить Form1
из Form2
через Reset
класс. Так что я делаю это в Form2
private void btnReset_Click(object sender, EventArgs e)
{
Reset RS = new Reset();
RS.BlankAll("Form1", pnl, UserName);
}
Все работает отлично и метод FillValues
Invoke успешно, но основная проблема заключается значение базы данных не приписывая lblId___ в FillValues
метода. Я это понимаю, потому что в моем классе Reset
я создаю новый объект для формы, которую я передаю. Некоторые люди предлагают мне использовать метод Invoke, используя по ссылке.
Как это можно сделать?
Пожалуйста, помогите ребята ....
@ShaiwalTripathi BlankAll Метод в вашей форме? , тогда вы должны выглядеть так: BlankAll (это, panel1, "admin"); – BMaximus
'FillValues' метод не возвращает никакого значения, так зачем использовать SomeDatacontainer? –
@ShaiwalTripathi передает форму в качестве аргумента. – BMaximus