|
 |
|
อ่านข้อมูลจาก DataReader ไปเก็บไว้ใน List<object> ได้ข้อมูลแค่ Record สุดท้ายครับ |
|
 |
|
|
 |
 |
|
ผมมีความจำเป็นที่จะต้องอ่านข้อมูลจาก DataReader แล้วนำไปเก็บไว้ใน List<object> ครับ เพื่อที่จะนำ List<object> ไปใช้กับ code ตัวอย่างที่ copy มาอีกทีนึง เนื่องจากไม่มี code ที่ทำงานโดยตรงกับ DataReader ครับ ก็เลยต้องแปลงข้อมูลกันนิดหน่อย
อันนี้เป็น code ตัวอย่างที่ copy มาครับ code นี้ใช้แสดง GridPanel ของ Ext.net นะครับ ผมตัดส่วนที่ยาวออกไป คิดว่าไม่เสียใจความ
Code (C#)
<script runat="server">
private static List<object> goods;
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
goods = new List<object>{
new {
Id = 1,
Price = 71.72,
Company = "3m Co",
Date = new DateTime(2007, 9, 1),
Size = "large",
Visible = true
},
new
{
Id = 27,
Price = 45.45,
Company = "Wal-Mart Stores, Inc",
Date = new DateTime(2006, 09, 09),
Size = "large",
Visible = true
}
};
}
}
protected void Store1_RefreshData(object sender, StoreRefreshDataEventArgs e)
{
List<object> data = new List<object>(goods);
//-- start paging ------------------------------------------------------------
var limit = e.Limit;
if ((e.Start + e.Limit) > data.Count)
{
limit = data.Count - e.Start;
}
List<object> rangeData = (e.Start < 0 || limit < 0) ? data : data.GetRange(e.Start, limit);
//-- end paging ------------------------------------------------------------
e.Total = data.Count;
this.Store1.DataSource = rangeData;
}
</script>
ทีนี้ ผมพยายามเลียนแบบการสร้าง List<object> จาก code ตัวอย่างด้านบน ได้มาเป็นแบบนี้ครับ
Code (C#)
<script runat="server">
private static List<Object> sp;
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
SqlConnection myConnection;
SqlCommand myCommand;
SqlDataReader myDataReader;
string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindSql"].ConnectionString;
myConnection = new SqlConnection(strConn);
myConnection.Open();
myCommand = new SqlCommand("SELECT * FROM Suppliers WHERE supplierId <= 100", myConnection);
myDataReader = myCommand.ExecuteReader();
if (myDataReader.HasRows)
{
while (myDataReader.Read())
{
sp = new List<object>
{
new
{
SupplierID = Convert.ToInt32(myDataReader["SupplierID"]),
CompanyName = myDataReader["CompanyName"].ToString(),
ContactName = myDataReader["ContactName"].ToString(),
ContactTitle = myDataReader["ContactTitle"].ToString()
}
};
}
myConnection.Close();
}
}
}
protected void Store1_RefreshData(object sender, StoreRefreshDataEventArgs e)
{
List<object> data = new List<object>(sp);
//-- start paging ------------------------------------------------------------
var limit = e.Limit;
if ((e.Start + e.Limit) > data.Count)
{
limit = data.Count - e.Start;
}
List<object> rangeData = (e.Start < 0 || limit < 0) ? data : data.GetRange(e.Start, limit);
//-- end paging ------------------------------------------------------------
e.Total = data.Count;
this.Store1.DataSource = rangeData;
}
</script>
ปรากฎว่า มันแสดงผลแค่ Record สุดท้ายเพียง Record เดียวครับ
ส่วนที่ทำให้มันแสดงผลแค่ Record สุดท้าย ผมคิดว่าเป็นที่ Code ตรงนี้
Code (C#)
while (myDataReader.Read())
{
sp = new List<object>
{
new
{
SupplierID = Convert.ToInt32(myDataReader["SupplierID"]),
CompanyName = myDataReader["CompanyName"].ToString(),
ContactName = myDataReader["ContactName"].ToString(),
ContactTitle = myDataReader["ContactTitle"].ToString()
}
};
}
ที่มันน่าจะทำให้ sp ถูกเขียนทับไปเรื่อยๆ
ผมลองใช้
Code (C#)
while (myDataReader.Read())
{
object newSp = new
{
SupplierID = Convert.ToInt32(myDataReader["SupplierID"]),
CompanyName = myDataReader["CompanyName"].ToString(),
ContactName = myDataReader["ContactName"].ToString(),
ContactTitle = myDataReader["ContactTitle"].ToString()
};
sp.Add(newSP);
}
พอรันแล้ว error ทันทีครับ
พอจะมีวิธีแก้ไขหรือไม่ครับ
อีกประการหนึ่งคือ
ใน code ต้นฉบับ เวลาโหลดเพจแล้ว ข้อมูลมาทันทีเลย ทั้งๆ ที่ผมก็ไม่เห็นมีคำสั่งใดให้โหลดข้อมูลจาก List<object>
แต่ code ที่ผมแก้ไข ต้องกดปุ่ม refresh ที่อยู่บน GridPanel ก่อน ข้อมูลถึงจะแสดงให้เห็นครับ (แค่ 1 record)
ขอบคุณทุกความช่วยเหลือครับ
Tag : .NET, Web (ASP.NET), C#, Windows

|
|
 |
 |
 |
 |
Date :
2012-07-05 15:19:00 |
By :
Aod47 |
View :
1484 |
Reply :
1 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
|
|

|
Load balance : Server 01
|