PDA

View Full Version : ازاین کدبراذخیره کردن فایل توسطxmlاستفاده میکنم



hadis shaeidi
سه شنبه 19 مهر 1390, 10:57 صبح
مشکل اینه که موقع ذخیره توصفحه جداگانه ذخیره میکنه وموقع لودفقطآخرین چیزی که ذخیره شده میادیه برنامه تحت شبکست که لیست سمت سرورنام کلاینتهاروداره

XmlTextWriter XmlWrt = new XmlTextWriter("test2.xml", ASCIIEncoding.Default);
XmlWrt.Formatting = Formatting.Indented;
XmlWrt.WriteStartDocument();
XmlWrt.WriteStartElement("configuration");
Application.DoEvents();
for (int i = 0; i < clients.Count; i++)
if (listViewClients.SelectedItems.Count != 0)
{
XmlWrt.WriteStartElement("general");
XmlWrt.WriteElementString("name", listViewClients.Items[i].Text.ToString());
XmlWrt.WriteEndElement();
}
XmlWrt.WriteEndElement();
XmlWrt.WriteEndDocument();
XmlWrt.Close()

hadis shaeidi
سه شنبه 19 مهر 1390, 11:01 صبح
این آخرشه اگه واضح نیومده
XmlWrt.WriteEndElement();
}
XmlWrt.WriteEndElement();
XmlWrt.WriteEndDocument();
XmlWrt.Close();
چیکارکنم که هروقت تکی ذخیره میکنم ودوباره میخوام نام کلاینت دیگه روذخیره کنم همه باهم پشت سرهم ذخیره بشن نه توی صفحه جداگانه که برالودکردن باهم بیان

nilmil_nil
سه شنبه 19 مهر 1390, 11:59 صبح
دوست عزیز اگه اطلاعاتت شبیه به یه جدول دیتابیس هست میتونی اونا رو بریزی توی یه دیتاست و با دستور WriteXML , ReadXML خود کلاس دیتاست استفاده کنی دیگه همچین مشکلی نداری

hadis shaeidi
چهارشنبه 20 مهر 1390, 08:59 صبح
ممنون ازپاسختون
من یک لیست یعنیlist viewدرسمت برنامه سرورم دارم وزمانی که برنامه سمت کلاینت اجرامیشود نام آن یعنیclientnameکه اونو تومتغیرnameذخیره کردم تواین لیست نمایش داده میشوندحالا میشه اطلاعاتوتوی دیتاست بریزم
اگه میشه لطف کنیددستوراتشوکامل برام بگید
موفق باشید

nilmil_nil
چهارشنبه 20 مهر 1390, 09:17 صبح
آره خوب میشه
شما یه دیتا ست تعریف کن
بعد براش یه تیبل اضافه کن و به تعدادی که میخوای برای تیبل ستون بساز و هر دفه که لازمه براش سطر اضافه کن و اونا رو توی فایل XML ذخیره کن بعد بخون و دوباره تغییراتی که میخوای رو ذخیر کن من یه مثال
برات میزنم


DataSet ds = new DataSet();
ds.Tables.Add("Users");
ds.Tables["Users"].Columns.Add("Name");
ds.Tables["Users"].Columns.Add("Family");
ds.Tables["Users"].Columns.Add("Date");
for (int i = 0; i < 5; i++)
{
ds.Tables["Users"].Rows.Add("User Name : " + i.ToString(),
"User Family : " + i.ToString(),
"User Date : " + i.ToString());
}
ds.WriteXml("Users.xml");
DataSet ds2 = new DataSet();
ds2.ReadXml("Users.xml");
for (int j = 0; j < ds.Tables["Users"].Rows.Count; j++)
{
listView1.Items.Add(ds2.Tables["Users"].Rows[j][0].ToString());
listView1.Items
[listView1.Items.Count - 1].SubItems.Add(ds2.Tables["Users"].Rows[j][1].ToString());
listView1.Items
[listView1.Items.Count - 1].SubItems.Add(ds2.Tables["Users"].Rows[j][2].ToString());
}

hadis shaeidi
چهارشنبه 20 مهر 1390, 10:08 صبح
بازم تشکرازلطفتون
ولی من میخوام چیزی که ازلیست انتخاب میشه همون nameذخیره بشه اینوچطوراضافه کنم.مثل کدبالایی:"name", listViewClients.Items[i].Text.ToString()وشرط هم if (listViewClients.SelectedItems.Count != 0)
یااگرهم نخوایم ازشرط استفاده کنیم بگیمname", listViewClients.selectedItems[i].Text.ToString() یعنی کلاینتی که ازلیست انتخاب شده روذخیره کن
میشه راهنمایی کنید لطفا

hadis shaeidi
چهارشنبه 20 مهر 1390, 13:11 عصر
همین کاری که گفتیدروانجام دادم ذخیره میکنه ولی بازم مثل قبل داخل یه صفحه جداگانه ذخیره میکنه وموقع لودآخری روفقط میاره
DataSet ds = new DataSet();
ds.Tables.Add("Users");
ds.Tables["Users"].Columns.Add("Name");
ds.Tables["Users"].Rows.Add("User Name : " + listViewClients.SelectedItems[0].Text.ToString());
ds.WriteXml("Users.xml");
DataSet ds2 = new DataSet();
ds2.ReadXml("Users.xml");
for (int j = 0; j < ds2.Tables["Users"].Rows.Count; j++)
{
listViewClients.Items.Add(ds2.Tables["Users"].Rows[j][0].ToString());
}

nilmil_nil
چهارشنبه 20 مهر 1390, 15:04 عصر
ds.Tables["Users"].Rows.Add("User Name : " + listViewClients.SelectedItems[0].Text.ToString())

خوب معلومه یکی رو میاره چون شما name های توی ListView رو نمیزاری فقط یکیش رو میذاری
باید با یه |for تمام اونا رو بریزی نه اونی که Select شده

hadis shaeidi
چهارشنبه 20 مهر 1390, 21:22 عصر
اینوکه شمامیگیددرسته من انجام دادم ولی این لیست دوستان هست یعنی من ازلیست اصلی انتخاب میکنم وبه لیست دوستان اضافه میکنم حالامیخوام این لیست روذخیره کنم.
DataSet ds = new DataSet();
ds.Tables.Add("Users");
ds.Tables["Users"].Columns.Add("Name");
for (int i = 0; i < listView1.Items.Count; i++)
{
ds.Tables["Users"].Rows.Add("User Name : " + listView1.Items[i].Text.ToString());
}
ds.WriteXml("Users1.xml");
خوب درست شدهرچی تولیست هست ذخیره میکنه ولی مشکل اینجاست که وقتی فرم رومیبندم ومیخوام کلاینت های دیگه ای که اضافه شدن روذخیره کنم میادتویه صفحه دیگه ذخیره میکنه درنتیجه قبلی ها برالودنشون داده نمیشن وفقط جدیداکه ذخیره شدن نشون داده میشه .
درکل میشه گفت چطوری هرموقع ذخیره کردم دنباله همون صفحه ذخیره کنه نیادتوصفحه جداگانه.که موقع لوهمه روبیاره

nilmil_nil
پنج شنبه 21 مهر 1390, 21:22 عصر
خوب مشکل اینجاست که WriteXML میاد لیست جدید رو جایگیزن لیست قبلی میکنه
شما باید او لیست دوستان قدیمی رو هم به لیست جدید اضاف کنی و بعد WriteXML رو بزنی یعنی لیستی که میره واسه ذخیره باید هم لیست دوستان قدیمی باشه هم جدید و بعد ذخیره بشه

homan1374
پنج شنبه 21 مهر 1390, 21:42 عصر
برای کار با xml از linq2xml استفاده کن .

hadis shaeidi
پنج شنبه 21 مهر 1390, 22:07 عصر
این روشوبلدنیستم ولی تابه حال ازدوروشی که استفاده کردم بازم همین مشکلوداره که هرچی تولیسته ذخیره میکنه ولی برنامه که بسته میشه ودوبارهrunمیشه کلاینت های لیست جدیدروتوصفحه دیگه ذخیره کرده وموقع لودجدیدامیان ولی قدیمیانمیان.
به نظرشماروشتون کارسازه؟چطوریه؟

nilmil_nil
جمعه 22 مهر 1390, 17:50 عصر
سلام ببخشید دیر حواب دادم
من این کد رو تست کردم
جواب داد
شما تغییرات رو روش اعمال کنید

DataSet ds = new DataSet();
ds.Tables.Add("Users");
ds.Tables["Users"].Columns.Add("Name");
ds.Tables["Users"].Columns.Add("Address");

for (int i = 0; i < listView1.Items.Count; i++)
{
ds.Tables["Users"].Rows.Add(listView1.Items[i].Text,
listView1.Items[i].SubItems[1].Text);
}
ds.WriteXml("Users.xml");


}

private void button7_Click(object sender, EventArgs e)
{
int count=listView1.Items.Count+1;
listView1.Items.Add("User : " + count.ToString());
listView1.Items
[listView1.Items.Count - 1].SubItems.Add("Address"+count.ToString());
}

private void button6_Click(object sender, EventArgs e)
{
DataSet ds2 = new DataSet();
ds2.ReadXml("Users.xml");
listView1.Items.Clear();
for (int j = 0; j < ds2.Tables["Users"].Rows.Count; j++)
{
listView1.Items.Add(ds2.Tables["Users"].Rows[j][0].ToString());
listView1.Items
[listView1.Items.Count - 1].SubItems.Add(ds2.Tables["Users"].Rows[j][1].ToString());
// listView1.Items
[listView1.Items.Count - 1].SubItems.Add(ds2.Tables["Users"].Rows[j][2].ToString());
}
}

hadis shaeidi
جمعه 22 مهر 1390, 21:38 عصر
ببخشیدبرنامه روکهrunمیکنم ودکمه ذخیره رومیزنم برمیگرده به برنامه وروی این خط کدمیمونه واین خطارومیده:

InvalidArgument=Value of '1' is not valid for 'index'.Parameter name: index
ds.Tables["Users"].Rows.Add(listView1.Items[i].Text,listView1.Items[i].SubItems[1].Text);

راستی ببخشیداینbutton7براچیه؟بایدک ی که براذخیره نوشتیدروبه این اضافه کنم یاکجاقرارش بدم
کدذخیره روتوچی نوشتیدتودکمه ای یاتوزیربرنامه ای؟

hadis shaeidi
جمعه 22 مهر 1390, 22:34 عصر
خطارفع شدتوهمون خط که خطامیدادبجایsubitem[1 منsubitem[0گذاشتم ولی بازم همون مشکل قبلی روداره جداگانه ذخیره میکنه!!!
راستی اگه بخوام عکسی که تولیست قدیمی هست روهمراه نام کلاینت به لیست دوستان اضافه کنم چه کدی روبنویسم چون نام کلاینت روبه لیست دوستان اضافه کردم ولی عکس رونه؟این هم مسیرعکسم هستش:F::\جدید3\myprojectserver1\myprojects erver1\ResourcesدردرایوfوبانامUsers
اینم کدaddهستش درفرم اصلی که به فرم دوستان اضافه میشه:
string clientName = null;
Friends frm = new Friends();
Show_Freinds frm1 = new Show_Freinds();



if (listViewClients.SelectedItems.Count != 0)
{
string index = (listViewClients.SelectedItems[0].Text.Substring(0, listViewClients.SelectedItems[0].Text.IndexOf('-')));
clientName = listViewClients.SelectedItems[0].Text;
frm.listView1.Items.Add( clientName, index);
frm.ShowDialog(this);
}