سیو دیتاگرید با Xml

#C

توسط alireza-kaka در 5 سال پیش
0 3.4k 14 4 سال پیش
alireza-kakathearrowdanieltheknighteatmadi
0

سلام من یه دیتا گرید دارم کد زیر رو هم براش تعیین کردم اما نه سیو میکنه نه لودش میکنه مشکلش کجاس؟ مبتدیم:ninja:        

DataTable table = CreateEmptyTable();

       static DataTable CreateEmptyTable()
       {
           DataTable table = new DataTable();
           table.Columns.Add("Questions", typeof(string));
           table.Columns.Add("Answers", typeof(string));
           table.TableName = "Table";
           return table;
       }
       private void  Form1_Load(object sender, EventArgs e)
       {
           // Load DataTable
           table = CreateEmptyTable();
           dataGridView1.DataSource = table;

           // Load DataGridView
           try
           {
               table.ReadXml("r.db");
               dataGridView1.DataSource = table;
           }
           catch { }

       }

       private void Form1_FormClosing(object sender, FormClosingEventArgs e)
       {
           // Save DataGridView
           try
           {

              table.WriteXml("r.db", XmlWriteMode.IgnoreSchema);
           }
           catch { }
آخرین ویرایش: 14-10-2014 ساعت 19:15، توسط Reza
0

سلام داداش کدت مشکلی نداره کار میکنه هیچوقت catch رو خالی نذار چون اینطوری اگر خطایی بوجود بیاد نمایش داده نمیشه اگر باز دیدی نمیشه try و catch رو پاک کن امتحان کن اگر خطا داد متنش رو بذار اینجا. Daniel

0

سلام پروژه پیوست شد پسوورد : [url]www.softafzar.net[/url]

0

> سلام پروژه پیوست شد پسوورد : [url]www.softafzar.net[/url]
سلام.ممنون از جواباتون.اين پروژه اي كه شما گذاشتين سيو ميكنه اما لود نميكنه.خيلي عالي بود.اگه ميشه اين قسمتشم درست كنيد
0

alireza_kaka همونطور که علیرضای عزیز(daniel) گفت کدی که گذاشتی مشکل نداره منم تست کردم جواب داد. جواب شما اینجاست: [url]http://www.softafzar.net/thread954.html/#post2054[/url]

0

> alireza_kaka همونطور که علیرضای عزیز(daniel) گفت کدی که گذاشتی مشکل نداره منم تست کردم جواب داد. جواب شما اینجاست: [url]http://www.softafzar.net/thread954.html/#post2054[/url]
ممنون متوجه شدم.اما واسم جواب نداد.عوضش جناب pashmak يه پروژه گذاشتن كه كارآمدتر ميشه قسمت لودش رو نگاه كنيد ببينيد مشكلش كجاست.سيو ميكنه اما لودش نميكنه.متشكرم
0

درودی دوباره کد درست هستش ، فقط من یک چیزیو فراموش کردم که اگه به کد ذخیره نگاهی میکردی میفهمیدی چیه که من یادم رفته بنویسمش!

من یادم رفته بود که Pashmak.XmlDoc رو درست تعریف کنم ! [CSHARP] Pashmak.XmlDoc = new XmlDocument(); [/CSHARP] یعنی اینجا :

[CSHARP] StreamReader loaddb = new StreamReader(od.FileName); string data = loaddb.ReadToEnd(); loaddb.Close(); try { Pashmak.XmlDoc.LoadXml(data); } catch { return;
} [/CSHARP]

باید این شکلی بشه

[CSHARP] StreamReader loaddb = new StreamReader(od.FileName); string data = loaddb.ReadToEnd(); loaddb.Close(); Pashmak.XmlDoc = new XmlDocument(); try { Pashmak.XmlDoc.LoadXml(data); } catch { return;
} [/CSHARP]

موفق باشی

0

خيلي ممنون Pashmak جان حل شد

0

ميشه واسه ديتا گريد تك ستونه هم كدش رو بزاريد؟

0

دوست عزیز شما میتوانید با کم و زیاد کردن Column ها مثله آب خوردن اونها رو ذخیره یا بازیابی کنید! مثال اگه شما این کد رو : [CSHARP] XmlElement XCLM1 = Pashmak.XmlDoc.CreateElement("Column1"); XmlElement XCLM2 = Pashmak.XmlDoc.CreateElement("Column2"); XCLM1.InnerText = dataGridView1.Rows[i].Cells[0].Value.ToString(); XCLM2.InnerText = dataGridView1.Rows[i].Cells[1].Value.ToString(); [/CSHARP] به : [CSHARP] XmlElement XCLM1 = Pashmak.XmlDoc.CreateElement("Column1"); XCLM1.InnerText = dataGridView1.Rows[i].Cells[0].Value.ToString(); [/CSHARP] تغییر بدهید ، آیا سخت میباشد؟ یا برای بازیابی : [CSHARP] for (int t = 0; t < ItemsList[j].ChildNodes.Count; t++) { if (ItemsList[j].ChildNodes[t].Name == "Column1") A = ItemsList[j].ChildNodes[t].InnerText; else if (ItemsList[j].ChildNodes[t].Name == "Column2") B = ItemsList[j].ChildNodes[t].InnerText; } [/CSHARP] به [CSHARP] for (int t = 0; t < ItemsList[j].ChildNodes.Count; t++) { if (ItemsList[j].ChildNodes[t].Name == "Column1") A = ItemsList[j].ChildNodes[t].InnerText; } [/CSHARP] تغییر دهید ! همین

0

ممنون اما اینکارو کردم به یه مشکل برخوردم.به هر حال مرسی

0

بفرما برای ذخیره : [CSHARP] Pashmak.XmlDoc = new XmlDocument(); XmlElement XRootA = Pashmak.XmlDoc.CreateElement("Pashmak"); XmlElement XRootB = Pashmak.XmlDoc.CreateElement("Softafzar"); { XmlElement XItems = Pashmak.XmlDoc.CreateElement("Items"); for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { try { XmlElement XItem = Pashmak.XmlDoc.CreateElement("Item"); XmlElement XCLM1 = Pashmak.XmlDoc.CreateElement("Column1"); XCLM1.InnerText = dataGridView1.Rows[i].Cells[0].Value.ToString(); XItem.AppendChild(XCLM1); XItems.AppendChild(XItem); } catch { } } XRootB.AppendChild(XItems); XRootA.AppendChild(XRootB); } Pashmak.XmlDoc.AppendChild(XRootA); SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "SoftAfzar Database (.db)|.db"; Random randomize = new Random(); sd.FileName = "SoftAfzar Database" + randomize.Next(); string filePath = ""; if (sd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { StreamWriter save = new StreamWriter(sd.FileName); save.Write(Pashmak.XmlDoc.InnerXml); filePath = sd.FileName; label1.Text = "Database Saved on\n" + filePath; save.Close(); } [/CSHARP]

برای بازیابی

[CSHARP] OpenFileDialog od = new OpenFileDialog(); od.Filter = "SoftAfzar Database (.db)|.db"; od.FileName = "SoftAfzar Database.db"; if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK) { StreamReader loaddb = new StreamReader(od.FileName); string data = loaddb.ReadToEnd(); loaddb.Close(); Pashmak.XmlDoc = new XmlDocument(); try { Pashmak.XmlDoc.LoadXml(data); } catch { return; } if (Pashmak.XmlDoc == null || Pashmak.XmlDoc.InnerXml == "") return; XmlNode XmlRoot = Pashmak.XmlDoc.GetElementsByTagName("Pashmak")[0]; for (int i = 0; i < XmlRoot.ChildNodes.Count; i++) {

                XmlNode XmlRChild = XmlRoot.ChildNodes[i];
                switch (XmlRChild.Name)
                {
                    case "Softafzar":
                        if (XmlRChild.SelectSingleNode("//Pashmak/Softafzar/Items") != null &&
                            XmlRChild.SelectSingleNode("//Pashmak/Softafzar/Items/Item") != null)
                        {
                            XmlNodeList ItemsList = XmlRChild.SelectNodes("//Pashmak/Softafzar/Items/Item");
                            for (int j = 0; j < ItemsList.Count; j++)
                            {
                                string A = "";
                                for (int t = 0; t < ItemsList[j].ChildNodes.Count; t++)
                                {
                                    if (ItemsList[j].ChildNodes[t].Name == "Column1")
                                        A = ItemsList[j].ChildNodes[t].InnerText;
                                }
                                dataGridView1.Rows.Add(A);
                            }
                        }
                        break;
                }
            }
        }

[/CSHARP]

0

واقعا شرمنده.اما نگاه کنید اینجوری میشه.دیتا گرید سمت چپی موقع لود یک ردیف رو خالی میذاره

0

با سلام در ذخیره کردن ، اخرین ردیف را ذخیره نمی کند ، یا اگر فقط یک ردیف داشته باشیم ان را ذخیره نمی کند مشکل کجاست. با تشکر

0

همین الان امتحان کردم، کدها درست بودن، اما این رو امتحان کنید: ذخیره: [CSHARP] XmlDocument XmlDoc = new XmlDocument(); XmlElement XRootA = XmlDoc.CreateElement("Pashmak"); XmlElement XRootB = XmlDoc.CreateElement("Softafzar"); { XmlElement XItems = XmlDoc.CreateElement("Items"); for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { try { XmlElement XItem = XmlDoc.CreateElement("Item"); XmlElement XCLM1 = XmlDoc.CreateElement("Column1"); XCLM1.InnerText = dataGridView1.Rows[i].Cells[0].Value.ToString(); XItem.AppendChild(XCLM1); XItems.AppendChild(XItem); } catch { } } XRootB.AppendChild(XItems); XRootA.AppendChild(XRootB); } XmlDoc.AppendChild(XRootA); SaveFileDialog sd = new SaveFileDialog(); sd.Filter = "SoftAfzar Database (.db)|.db"; Random randomize = new Random(); sd.FileName = "SoftAfzar Database" + randomize.Next(); string filePath = ""; if (sd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { StreamWriter save = new StreamWriter(sd.FileName); save.Write(XmlDoc.InnerXml); filePath = sd.FileName; label1.Text = "Database Saved on\n" + filePath; save.Close(); } [/CSHARP]

بازیابی: [CSHARP] OpenFileDialog od = new OpenFileDialog(); od.Filter = "SoftAfzar Database (.db)|.db"; od.FileName = "SoftAfzar Database.db"; if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK) { StreamReader loaddb = new StreamReader(od.FileName); string data = loaddb.ReadToEnd(); loaddb.Close(); XmlDocument XmlDoc = new XmlDocument(); try { XmlDoc.LoadXml(data); } catch { return; } if (XmlDoc == null || XmlDoc.InnerXml == "") return; XmlNode XmlRoot = XmlDoc.GetElementsByTagName("Pashmak")[0]; for (int i = 0; i < XmlRoot.ChildNodes.Count; i++) {

                XmlNode XmlRChild = XmlRoot.ChildNodes[i];
                switch (XmlRChild.Name)
                {
                    case "Softafzar":
                        if (XmlRChild.SelectSingleNode("//Pashmak/Softafzar/Items") != null &&
                            XmlRChild.SelectSingleNode("//Pashmak/Softafzar/Items/Item") != null)
                        {
                            XmlNodeList ItemsList = XmlRChild.SelectNodes("//Pashmak/Softafzar/Items/Item");
                            for (int j = 0; j < ItemsList.Count; j++)
                            {
                                string A = "";
                                for (int t = 0; t < ItemsList[j].ChildNodes.Count; t++)
                                {
                                    if (ItemsList[j].ChildNodes[t].Name == "Column1")
                                        A = ItemsList[j].ChildNodes[t].InnerText;
                                }
                                dataGridView1.Rows.Add(A);
                            }
                        }
                        break;
                }
            }
        }

[/CSHARP]

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید