PDA

View Full Version : سوال: ذخیره شدن تمام اطلاعات کنترلها در صورت ارور و بازگردانی همان اطلاعات به داخل کنترلها



forodo
جمعه 19 دی 1393, 12:31 عصر
سلام
من با تراکنش اطلاعات رو داخل بانک می ریزم.
حالا می خوام اگه rollback شد اطلاعات کنترلها داخل چیزی ذخیره بشه و فرم بسته بشه و وقتی که دوباره فرم رو باز کردم اطلاعات داخل کنترلهای مربوطه بریزه.
من 50 تا فرم با کنترلها مختلف ( تکست باکس، ریدیوباتن، چکباکس، کمبوباکس و ... ) دارم که می خوام یه تابع باشه که فقط اون رو صدا بزنم و کاری نداشته باشم که کدوم فرم و چه کنترلهایی داره.
هر فرمم ممکنه کنترلهاش فرق داشته باشه.
چطور می تونم این کار رو بکنم؟
با تشکر

forodo
شنبه 20 دی 1393, 21:53 عصر
در اصل اگه بشه یه آرایه تعریف کرد و مقادیر رو داخلش ریخت و دوباره فراخوانی کرد عالیه.
چطور می تونم اینکار رو بکنم؟

forodo
پنج شنبه 25 دی 1393, 19:27 عصر
دوستان کسی این کار رو نکرده؟

forodo
پنج شنبه 25 دی 1393, 23:37 عصر
خودم نوشتم.
فقط دوستان ببینید مشکلی نداره.
کار می کنه. منظورم اینه که ببینید میشه بهترش کرد یا چیزه خاصی داره که ممکنه به مشکل بخوره.
یه کلاس تعریف کردم و :
static class clsFormOperation
{
// تعریف دیکشنری
static Dictionary<string, string> nameValue = new Dictionary<string, string>();

// ذخیره اطلاعات کنترلها داخل دیکشنری
public static void saveDataToDictionaty(Form f)
{
foreach (Control c in f.Controls)
{
if (c is TextBox)
{
nameValue.Add(c.Name, ((TextBox)c).Text);
}
else if (c is ComboBox)
{
nameValue.Add(c.Name, ((ComboBox)c).SelectedValue.ToString());
}
searchControlsForSave(c);
}
}

// گرفتن اطلاعات کنترلها از دیکشنری
public static void getDataFromDictionaty(Form f)
{
foreach (Control c in f.Controls)
{
foreach (KeyValuePair<string, string> kvp in nameValue)
{
if (c is TextBox)
{
if (kvp.Key == c.Name)
{
c.Text = kvp.Value.ToString();
}
}
if (c is ComboBox)
{
if (kvp.Key == c.Name)
{
((ComboBox)c).SelectedValue = kvp.Value.ToString();
}
}
}
searchControlsForGet(c);
}
nameValue.Clear();
}

// جستجوی کنترلهای داخل فرم برای گرفتن مقادیر آنها برای ذخیره در دیکشنری
static void searchControlsForSave(Control c)
{
foreach (Control ct in c.Controls)
{
if (ct is TextBox)
{
nameValue.Add(ct.Name, ((TextBox)ct).Text);
}
else if (ct is ComboBox)
{
nameValue.Add(ct.Name, ((ComboBox)ct).SelectedValue.ToString());
}
searchControlsForSave(ct);
}
}

// جستجوی کنترلها برای پیدا کردن کنترل و ریختن مقدار داخل کنترل از دیکشنری
static void searchControlsForGet(Control c)
{
foreach (Control ct in c.Controls)
{
foreach (KeyValuePair<string, string> kvp in nameValue)
{
if (ct is TextBox)
{
if (kvp.Key == ct.Name)
{
ct.Text = kvp.Value.ToString();
}
}
if (ct is ComboBox)
{
if (kvp.Key == ct.Name)
{
((ComboBox)ct).SelectedValue = kvp.Value.ToString();
}
}
}
searchControlsForGet(ct);
}
}
}
حالا میشه کنترلهای دیگه رو هم داخلش قرار داد.
برای استفاده هم در داخل catch که اطلاعات رو save کنه:
clsFormOperation.saveDataToDictionaty(this);
this.Close();
و برای بازخوانی داخل رویداد لود فرم:
clsFormOperation.getDataFromDictionaty(this);