สมมติ table ชื่อ customer
โดยกำหนดให้ field แรกคือ id มี type เป็น int
field ที่สองคือ information มี type เป็น xml
ตัวอย่างข้อมูล information ที่เก็บข้อมูลเป็น type xml
<?xml version="1.0" encoding="utf-8"?>
<Persons>
<Person>
<Name>Ingrid</Name>
<City>Oslo</City>
<Age>63</Age>
</Person>
</Persons>
คือแต่ละ id ก็จะมีข้อมูล information ใช่มั้ยครับ
คือผมต้องการดึงข้อมูล information อ่าคับที่เก็บเป็น xml ให้แสดงออกมาทาง GridView
โดยคอลัมน์ที่แสดงใน GridView เป็นชื่อที่อยู่ใน tag อ่าคับ พวก Name City Age
และให้แสดงข้อมูลเป็นข้อมูลภายใน tag อ่าคับ ก็คือ Ingrid Oslo 63 ให้ตรงตาม column
และให้แสดงข้อมูล information ของทุกๆ id ทาง gridview
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
GridView1.DataSource = GetDataSource();
GridView1.DataBind();
}
protected DataTable GetDataSource()
{
const string key = "MyDataSource";
DataTable Dt = Session[key] as DataTable;
informationDataContext z = new informationDataContext();
DataSet Ds = new DataSet();
if (Dt == null)
{
Dt = new DataTable();
Ds = new DataSet();
var query = from a in z.jubzs where select a.xml;
var xmlstring = from q in query select q.ToString();
foreach (string h in xmlstring)
{
System.IO.TextReader Tr = new System.IO.StringReader(h);
Ds.ReadXml(Tr);
}
Dt.Columns.Add("Name", typeof(string));
Dt.Columns.Add("City", typeof(string));
Dt.Columns.Add("Age", typeof(string));
Dt = Ds.Tables[0];
Session[key] = Dt;
}
return Dt;
}
protected void GridView1_RowEditing(object sender,GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindGrid();
}
protected void GridView1_RowCancelingEdit(object sender,
GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
BindGrid();
}
protected void GridView1_RowUpdating(object sender,
GridViewUpdateEventArgs e)
{
TextBox cityty = GridView1.Rows[e.RowIndex].FindControl("txtCity") as TextBox;
TextBox ageage = GridView1.Rows[e.RowIndex].FindControl("txtAge") as TextBox;
string newcity = cityty.Text;
string newAge = ageage.Text;
DataTable Dt = GetDataSource();
Dt.Rows[e.RowIndex][1] = newcity;
Dt.Rows[e.RowIndex][2] = newAge;
GridView1.EditIndex = -1;
BindGrid();
}
}
คือมันสามารถแสดงได้อ่ะครับ แต่ผมอยากให้มันแสดงค่า id ที่เป็น int ไปพร้อมๆกันใน GridView เลยอ่ะครับ
ผมทำตรงใส่ค่า id ไปพร้อมๆกับที่แปลง xml format เป็น string เข้าไปข้างใน dataset ไม่เป็นนะครับ
แล้วที่บอกว่าให้ทำ datatable เป็น string แล้วค่อยเก็บอ่าครับ คือไม่ทราบว่าทำให้เป็นในรูปแบบ xml ก่อนเก็บยังไงอ่าครับ
protected DataTable GetDataSource()
{
const string key = "MyDataSource";
DataTable Dt = Session[key] as DataTable;
informationDataContext z = new informationDataContext();
DataSet Ds = new DataSet();
if (Dt == null)
{
Dt = new DataTable();
Ds = new DataSet();
var query = from a in z.jubzs where select a.xml;
var xmlstring = from q in query select q.ToString();
foreach (string h in xmlstring)
{
System.IO.TextReader Tr = new System.IO.StringReader(h);
Ds.ReadXml(Tr);
}
Dt.Columns.Add("Name", typeof(string));
Dt.Columns.Add("City", typeof(string));
Dt.Columns.Add("Age", typeof(string));
Dt = Ds.Tables[0];
}
DataColumn Dc = new DataColumn();
Dc.ColumnName = "ID";
Dc.DataType = System.Type.GetType("System.Int32");
Dt.Columns.Add(Dc);
foreach (DataRow Dr in Dt.Rows)
{
Dr["ID"] = *** YourID ***
}
Session[key] = Dt;
return Dt;
}