 |
|

ถ้าข้อมูลชุดนี้จัดเก็บใน MS SQL SERVER
ก็พอจะใช้ DYNAMIC SQL ปรับรูปแบบให้ได้ค่ะแต่ก็ยากเอยู่ดี
แต่นี่เก็บใน EXCEL ใช่ปะคะ EXCEL ไม่ได้มี DYNAMIC SQL รองรับการนี้หรอกมั้งคะ
แต่จากโจทย์บอกว่าจะเอาไป DISPLAY ใน GRID ถ้าอย่างนั้นพอจะมีทางเลี่ยงค่ะ
หลักการมีอยู่ว่า ต้องมีการปรับโครงสร้างของ data ตอน output ออกมา
จากข้อมูล excel ที่มี 2 column จำนวน n record หรือ row หรือ แถว
( เอาเป็นว่าจะดึงมากี่ record ก็ได้ตามสะดวกค่ะ )
มาเป็นข้อมูล 1 แถว จำนวน n x 2 column ( เพราะย้ายมาแสดงแถวเดียว )
พราวเลยใช้ XML มารับข้อมูลแล้วก็ปรับโครงสร้างไปพร้อมกัน
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Xml;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//create document on memory
XmlDocument xDoc = new XmlDocument();
XmlDeclaration xDeclaration = xDoc.CreateXmlDeclaration("1.0", null, null);
xDoc.AppendChild(xDeclaration);
XmlElement rootNode = xDoc.CreateElement("ข้อมูลของคุณจิงโจ้_จะสุ่มเอานะคะ");
Random rnd = new Random(System.DateTime.Now.Millisecond);
for (int i = 0; i < 10; i++)
{
string runningNoStr = (i + 1).ToString("000");
string _NameStr = string.Empty.PadLeft(/*rnd.Next(1, 20)*/ 4, (char)rnd.Next('A', 'Z'));
string _AgeStr = rnd.Next(18, 40).ToString();
rootNode.SetAttribute("ชื่อที่_" + runningNoStr, _NameStr);
rootNode.SetAttribute("อายุที่_" + runningNoStr, _AgeStr);
}
xDoc.AppendChild(rootNode);
MemoryStream xmlStream = new MemoryStream();
xDoc.Save(xmlStream);
//resetting position prevent any access
xmlStream.Flush();
xmlStream.Position = 0;
//Create dataset to bind with on memory xml
DataSet bindData = new DataSet();
bindData.ReadXml(xmlStream);
GridView1.DataSource = bindData;
GridView1.DataBind();
}
}
}
เข้าใจว่า คุณจิงโจ้จะอ่านข้อมูลจาก excel มาได้แล้วนะคะ
สมมุติว่าอ่านมาเก็บไว้ใน datatable ชื่อ excelTable นะคะ
จากนั้นให้แก้ ตรง loop เป็น
Code (C#)
int counter = 0 ;
foreach DataRow excelRow in excelTable.Rows
{
string runningNoStr = (counter + 1).ToString("000");
string _NameStr = excelRow[ชื่อcolumn ของข้อมูลชื่อคน].ToString();
string _AgeStr = excelRow[ชื่อcolumn ของข้อมูลอายุ].ToString());
rootNode.SetAttribute("ชื่อที่_" + runningNoStr, _NameStr);
rootNode.SetAttribute("อายุที่_" + runningNoStr, _AgeStr);
}
ค่ะ
ปล. วันนี้จะนั่งร่าง project ของตัวเองต่อเลยทำให้สมองส่วน vb.net ไม่ทำงานไปแระค่ะ
ถ้าใช้ vb.net ก็ไป convert เอานะคะ
|
 |
 |
 |
 |
Date :
2010-05-19 10:06:09 |
By :
blurEyes |
|
 |
 |
 |
 |
|
|
 |