PDA

View Full Version : LINQ To XML با استفاده از دیتاتیبل



13601360
دوشنبه 23 اردیبهشت 1392, 14:35 عصر
سلام دوستان
من برای بایند کردن یک فایل XML با ساختار پایین



<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book>
<id>1</id>
<title>Introducing Microsoft LINQ</title>
<author>Paolo Pialorsi</author>
</Book>
</Books>


یک دیتاست به پرووژه ام اضافه کردم و داخل دیتاست هم یک دیتاتیبل به نام Book با سه ستون author، id ، title که نوع ستون id رو کلید و با خاصیت auto increment تنظیم کردم
الان می خوام از وقتی از طریق دو تا تکس باکس نام کتاب و نویسنده رو بگیرم و با کلید که توسط دیتاتیبل درست شده در یک فایل XML بریزم
اگر امکان داره یک نمونه کد معرفی کنید
ممنون

Mahmoud.Afrad
دوشنبه 23 اردیبهشت 1392, 23:37 عصر
نیاز به دیتاست نیست. از LinqToXML استفاده کن.
فرض کن نام فایل books.xml و کنار خایل اجرایی برنامه باشه.
به اینصورت میتونی اطلاعات را بیرون بکشی و نمایش بدی:

string xmlFilePath = System.IO.Path.Combine(Application.StartupPath , "books.xml" );
XElement element = null;
try
{
element = XElement.Load(Path.Combine(xmlFilePath));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}

var q = from item in element.Elements("Book")
select new
{
ID = item.Element("id").Value,
title = item.Element("title").Value,
author = item.Element("author").Value
};
dataGridView1.DataSource = q.ToList();

به صورت زیر هم میتونی کتاب جدید اضافه کنی:

string xmlFilePath = System.IO.Path.Combine(Application.StartupPath, "books.xml");
XElement element = null;
try
{
element = XElement.Load(Path.Combine(xmlFilePath));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}

int newId = 1;
if (element.Elements("Book").Count() > 0)
{
newId = element.Elements("Book").Max(item => Convert.ToInt32(item.Element("id").Value))+1;
}

element.Add(new XElement("Book",
new XElement("id", newId),
new XElement("title", textBox1.Text),
new XElement("author", textBox2.Text)
));

element.Save(xmlFilePath);

13601360
سه شنبه 24 اردیبهشت 1392, 00:32 صبح
ممنون خیلی عالی بود
سرعت نمایش اطلاعات با این روش ار دستاتیبل خیلی بیشتر هست
ببخشید اگر به خوام جستجو انجام بدم به همین روش
یعنی توسط فیلد id جستجو کنم
کدش رو چطور باید تغییر بدم

Mahmoud.Afrad
سه شنبه 24 اردیبهشت 1392, 16:31 عصر
string xmlFilePath = System.IO.Path.Combine(Application.StartupPath, "books.xml");
XElement element = null;
try
{
element = XElement.Load(Path.Combine(xmlFilePath));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}

var book = from item in element.Elements("Book")
where item.Element("id").Value == textBox1.Text
select new
{
ID = item.Element("id").Value,
title = item.Element("title").Value,
author = item.Element("author").Value
};

dataGridView1.DataSource = book.ToList();

13601360
چهارشنبه 25 اردیبهشت 1392, 00:18 صبح
ممنون از لطفتون
میشه خواهش کنم نظرتون رو درباره سوال این تاپیک (http://barnamenevis.org/showthread.php?398359-ID-%D8%AF%D8%B1-%DB%8C%DA%A9-%D9%81%D8%A7%DB%8C%D9%84-XML-%D8%A7%D8%B2-%D9%86%D9%88%D8%B9-Attribute-%D8%A8%D8%A7%D8%B4%D8%AF-%DB%8C%D8%A7-Element) بگیرد