เพิ่มเขตข้อมูลทั้งหมดให้กับ DataGrid ใน ASP.NET
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-06-30 15:40:15
หนึ่งในคำถามที่พบบ่อยในฟอรั่มคือ: "ฉันจะแสดงผลรวมคอลัมน์ใน DataGrid ได้อย่างไร" ฉันได้ให้โค้ดตัวอย่างสำหรับคำถามนี้เป็นการส่วนตัวหลายครั้ง ดังนั้นฉันจึงต้องการให้คำแนะนำดังกล่าวในชื่อ DotNetJunkies ในคู่มือนี้ คุณจะได้เรียนรู้วิธีนับค่าของคอลัมน์ใน DataGrid โดยทางโปรแกรม และแสดงค่ารวมในส่วนท้ายของ DataGrid ตัวอย่างที่ดาวน์โหลดได้ในคู่มือนี้มีทั้งโค้ด C# และ Visual Basic.NET
ผลลัพธ์สุดท้ายของคู่มือนี้จะมีลักษณะดังนี้:
ดังที่เห็นได้จากภาพด้านบน:
DataGrid ในภาพหน้าจอที่ใช้ด้านบนเป็น DataGrid ทั่วไป มีคุณสมบัติหลายอย่างที่ควบคุมลักษณะที่ปรากฏของ DataGrid ซึ่งใช้ BoundColumns สองคอลัมน์เพื่อจัดการข้อมูล แต่นั่นไม่ใช่สิ่งที่สำคัญที่สุด สิ่งสำคัญจริงๆ ในการทำสิ่งนี้ให้ดีคือการใช้เหตุการณ์ DataGrid.OnItemDataBound เหตุการณ์นี้จะถูกทริกเกอร์ทุกครั้งที่บันทึกถูกผูกไว้กับ DataGrid คุณสามารถสร้างตัวจัดการเหตุการณ์สำหรับเหตุการณ์นี้เพื่อจัดการบันทึกข้อมูลได้ ในกรณีนี้ คุณจะได้รับมูลค่ารวมของคอลัมน์ราคา ณ รันไทม์
ส่วนท้ายหมายถึงแถวสุดท้ายของช่วงข้อมูล เมื่อแถวนี้ผ่านเกณฑ์ คุณจะรับสถิติรันไทม์ของคอลัมน์ราคาระหว่างการประมวลผลเหตุการณ์ได้
การนำไปปฏิบัติ :
ขั้นแรก เรามาหาวิธีจัดการเอาท์พุตของเว็บฟอร์มกันก่อน ในบทช่วยสอนนี้ คุณจะใช้แบบฟอร์มบนเว็บ (calcTotals.aspx) และไฟล์โค้ดคลาส (calcTotals.aspx.cs) จุดประสงค์ของคู่มือนี้คือโค้ดคลาสจะถูกคอมไพล์โดยใช้คอมไพเลอร์ Just-In-Time นี่คือรหัสสำหรับ calcTotals.aspx:
<%@ หน้าสืบทอด = "myApp.calcTotals" Src = "20010731T0101.aspx.cs" %>
|
สร้างคอลัมน์อัตโนมัติ = "เท็จ" เซลล์แพดดิ้ง = "4" เซลล์ระยะห่าง = "0" BorderStyle = "ทึบ" BorderWidth = "1" เส้นตาราง = "ไม่มี" BorderColor = "สีดำ" ItemStyle-Font-Name="Verdana" ItemStyle-Font-Size = "9pt" HeaderStyle-Font-Name = "เวอร์ดานา" HeaderStyle-Font-Size = "10pt" HeaderStyle-Font-Bold = "จริง" HeaderStyle-ForeColor="สีขาว" HeaderStyle-BackColor="สีน้ำเงิน" FooterStyle-Font-Name = "เวอร์ดานา" FooterStyle-Font-Size = "10pt" FooterStyle-Font-Bold = "จริง" FooterStyle-ForeColor="สีขาว" FooterStyle-BackColor="สีน้ำเงิน" OnItemDataBound="MyDataGrid_ItemDataBound" ShowFooter="จริง">
|
ItemStyle-HorizontalAlign = "ขวา" HeaderStyle-HorizontalAlign="Center" />
|
ในเว็บฟอร์ม คุณใช้ @Page เพื่อประกาศรหัสชั้นเรียนที่เพจสืบทอดมาโดยตรง คุณลักษณะ SRC ระบุว่าโค้ดคลาสจะถูกคอมไพล์โดยใช้คอมไพเลอร์ JIT การประกาศสไตล์โค้ดส่วนใหญ่ในเว็บฟอร์มจะใช้เพื่อทำให้ DataGrid ดูดีขึ้น
หนึ่งในคุณสมบัติสุดท้ายที่ระบุคือคุณสมบัติ OnItemDataBound เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเหตุการณ์ OnItemDataBound เกิดขึ้น
DataGrid (MyGrid) ในเว็บฟอร์มประกอบด้วย BoundColumns สองคอลัมน์ คอลัมน์หนึ่งคือชื่อเรื่อง และอีกคอลัมน์คือราคา คอลัมน์ชื่อและราคาของตาราง Titles ในฐานข้อมูล Pubs (SQL Server) จะแสดงที่นี่
ละเว้นคำจำกัดความของโค้ด
รหัสชั้นเรียนจะใช้ทุกที่ ในรหัสชั้นเรียน คุณสามารถดำเนินการได้สองเหตุการณ์: เหตุการณ์ Page_Load และเหตุการณ์ MyGrid_OnItemDataBound นอกจากนี้ยังมีวิธีการส่วนตัว CalcTotal ซึ่งสามารถใช้เพื่อดำเนินการทางคณิตศาสตร์กับสถิติรันไทม์ได้อย่างง่ายดาย
จุดเริ่มต้นของบล็อกโครงสร้างพื้นฐานของโค้ดคลาส:
ใช้ระบบ; ใช้ System.Web; โดยใช้ System.Web.UI; ใช้ System.Web.UI.WebControls; ใช้ System.Web.UI.HtmlControls; ใช้ System.Data; โดยใช้ System.Data.SqlClient;
เนมสเปซ myApp - calcTotals คลาสสาธารณะ: หน้า - ป้องกัน DataGrid MyGrid; ผลรวมการวิ่งคู่ส่วนตัว = 0; - - |
ในโครงสร้างพื้นฐานของรหัสชั้นเรียน คุณต้องใช้คำสั่งที่เกี่ยวข้องเพื่อนำเข้าเนมสเปซ (เนมสเปซ) ในการประกาศคลาส คุณจะประกาศตัวแปรสองตัว ตัวหนึ่งคือการแมปตัวแปรที่ควบคุม DataGrid (MyGrid) ของฟอร์มเว็บในโค้ดคลาส อีกตัวคือค่าความแม่นยำสองเท่าที่ใช้เพื่อดำเนินการสถิติรันไทม์ในคอลัมน์ราคาของ DataGrid .
เหตุการณ์ Page_Load
ในเหตุการณ์ Page_Load สิ่งที่คุณต้องทำคือเชื่อมต่อกับ SQL Server และดำเนินการ SqlCommand แบบง่ายๆ คุณได้รับชื่อและข้อมูลราคาทั้งหมดที่มีค่าราคา > 0 คุณใช้เมธอด SqlCommand.ExecuteReader เพื่อส่งคืน SqlDataReader และผูกเข้ากับ DataGrid (MyGrid) โดยตรง
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e) - SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//สร้างการเชื่อมต่อ SQL SqlCommand myCommand = new SqlCommand("SELECT title, price FROM Titles WHERE price > 0", myConnection );//สร้างคำสั่ง SQL
พยายาม - myConnection.Open();//เปิดการเชื่อมต่อฐานข้อมูล MyGrid.DataSource = myCommand.ExecuteReader();//ระบุแหล่งข้อมูลของ DataGrid MyGrid.DataBind();//ผูกข้อมูลกับ DataGrid myConnection.Close();//ปิดการเชื่อมต่อข้อมูล} จับ (ข้อยกเว้นเช่น) - //จับข้อผิดพลาด HttpContext.Current.Response.Write(ex.ToString()); - - |
วิธี CalcTotals
วิธีการ CalcTotals ใช้เพื่อจัดการตัวแปร runningTotal ค่านี้จะถูกส่งผ่านเป็นสตริง คุณต้องแยกวิเคราะห์เป็นสองเท่า จากนั้นตัวแปร runningTotal จะกลายเป็นสองเท่า
โมฆะส่วนตัว CalcTotal (สตริง _price) - พยายาม - runningTotal += Double.Parse(_price); - จับ - //จับข้อผิดพลาด} - |
เหตุการณ์ MyGrid_ItemDataBound
เหตุการณ์ MyGrid_ItemDataBound ถูกเรียกเมื่อแต่ละแถวในแหล่งข้อมูลถูกผูกไว้กับ DataGrid ในตัวจัดการเหตุการณ์นี้ คุณสามารถประมวลผลข้อมูลแต่ละแถวได้ เพื่อวัตถุประสงค์ของคุณที่นี่ คุณจะต้องเรียกใช้เมธอด CalcTotals แล้วส่งข้อความจากคอลัมน์ Price และจัดรูปแบบคอลัมน์ Price ของแต่ละแถวด้วยจำนวนเงิน และแสดงค่า runningTotal ในแถวส่วนท้าย
โมฆะสาธารณะ MyDataGrid_ItemDataBound (ผู้ส่งวัตถุ DataGridItemEventArgs e) - ถ้า (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) - CalcTotal(e.Item.Cells[1].ข้อความ); e.Item.Cells[1].Text = string.Format("{0:c}", Convert.ToDouble(e.Item.Cells[1].Text)); - อื่นถ้า (e.Item.ItemType == ListItemType.Footer ) - e.Item.Cells[0].Text="Total"; e.Item.Cells[1].Text = string.Format("{0:c}", runningTotal); - - |
ในตัวจัดการเหตุการณ์ MyGrid_ItemDataBound ขั้นแรกคุณต้องใช้ ListItemType เพื่อตรวจสอบว่า DataGridItem ปัจจุบันเป็นรายการข้อมูลหรือแถว AlternatingItem สำหรับรายการข้อมูล คุณเรียก CalcTotals และส่งค่าของคอลัมน์ราคาเป็นพารามิเตอร์ จากนั้นคุณจัดรูปแบบและใส่สีให้กับคอลัมน์ราคาในรูปแบบจำนวนเงิน
ถ้า DataGridItem เป็นส่วนท้าย RunningTotal จะสามารถแสดงในรูปแบบจำนวนเงินได้
สรุป
ในคู่มือนี้ คุณได้เรียนรู้วิธีใช้เหตุการณ์ DataGrid.OnItemDataBound เพื่อทำสถิติรันไทม์ในคอลัมน์ DataGrid เมื่อใช้เหตุการณ์นี้ คุณสามารถสร้างผลรวมของคอลัมน์และใส่สีส่วนท้ายของแถว DataGrid ได้