สร้างคอลัมน์พิเศษสำหรับ Datagrid
ของ ASP.NET
ใช้ได้กับ Microsoft ASP.NET
สรุป:
คอนโทรล Datagrid
ของ ASP.NET
จัดเป็นคอนโทรลที่มีประสิทธิภาพมากที่สุดชนิดหนึ่งสำหรับนักพัฒนาเว็บ บทความนี้จะบอกวิธีการว่าคุณจะใช้คอนโทรลนี้ให้มีประสิทธิภาพสูงขึ้นไปอีก โดยการเพิ่มคอลัมน์พิเศษเพื่อแสดงข้อมูลอย่างเหมาะสมสำหรับผู้ใช้ได้อย่างไร
คำนำ
เราคงต้องยอมรับว่าการเขียนโค้ด Datagrid สำหรับ Microsoft ASP.NET จัดเป็นงานที่ซ้ำซากจำเจพอสมควร แม้แต่คนที่หมกมุ่นกับคอนโทรลตัวนี้อย่างดิฉันก็มักจะหาทางลัดเพื่อทำให้งานต่างๆเหล่านี้ง่ายขึ้น ทุกคนคงไม่มีใครชอบเขียนโค้ดที่ซ้ำซากจำเจอยู่แล้วใช่หรือไม่? ดังนั้นเพื่อเป็นการหลีกเลี่ยงการทำงานที่น่าเบื่อเหล่านี้ เป้าหมายของบทความนี้ก็คือการสร้างโค้ดที่สามารถนำไปใช้ซ้ำกับโครงการอื่นๆได้ และนำโค้ดไปใส่เอาไว้ในแพกเก็จง่ายดายที่คุณสามารถนำไปใช้ได้ซ้ำแล้วซ้ำอีก นั่นคือหัวใจสำคัญของการเขียนโปรแกรมเชิงออปเจ็กต์ และการทำงานร่วมกับ Datagrid ก็ไม่มีข้อยกเวน วิธีการอย่างหนึ่งที่จะทำตามเป้าหมายนี้กับคอนโทรล Datagrid ก็คือเขียนโค้ดที่คุณต้องใช้เป็นประจำกับประเภทคอลัมน์ภายในคอนโทรล (ที่ดิฉันจะใช้ในตัวอย่างแรก) แล้วสร้างประเภทคอลัมน์พิเศษที่คุณสามารถนำไปใช้ซ้ำในโครงการ Datagrid อื่นๆได้
บทความนี้จะแนะนำขั้นตอนของการทำงานร่วมกับคอนโทรล DropDownList ที่อยู่ภายในคอลัมน์อันหนึ่งใน Datagrid ของคุณ โดยใช้ TemplateColumn มาตรฐาน จากนั้นแปลงโลจิกดังกล่าวไปเป็นประเภทคอลัมน์พิเศษของคุณเองเพื่อใช้กับ Datagrid ซึ่งดิฉันจะเรียกมันว่า DropDownColumn นอกจากนั้นยังมีคอลัมน์ Datagrid พิเศษแจกฟรีที่สร้างขึ้นมาสำหรับคุณแล้ว ซึ่งคุณสามารถดาวน์โหลดไปใช้ได้จาก MetaBuilders.com อีกด้วย
ในกรณีของการนำโค้ดกลับมาใช้ใหม่
ถ้าหากแผนกของคุณเหมือนกับองค์กรส่วนใหญ่แล้วละก็ คุณคงแยกตรรกะทางธุรกิจและ/หรือตรรกะสำหรับเรียกใช้ข้อมูลไปเป็นคอมโพเน้นต์แยกจากกัน หรือชุดของคอมโพเน้นต์ต่างๆอยู่แล้ว ในขณะที่ไฟล์ ASP.NET ที่เหลือ, ASPX และโค้ดที่อยู่เบื้องหลังเก็บเฉพาะตรรกะที่ใช้ในการแสดงผลเท่านั้น อย่างไรก็ตามแม้แต่ตรรกะที่ใช้ในการแสดงผลก็ยังสมควรนำกลับมาใช้ใหม่ได้ในกรณีที่เป็นไปได้ ดังนั้นครั้งหน้าถ้าหากมีผู้ใช้มาเคาะประตูของคุณแล้วบอกว่า "ผมอยากได้แอพพลิเคชันที่มีหน้าตาเหมือนกับแอพพลิเคชันที่ซูซี่แผนกบัญชีใช้อยู่" คุณสามารถสร้างแอพพลิเคชันให้แก่ผู้ใช้คนนี้ได้อย่างรวดเร็ว โดยการนำเอาองค์ประกอบที่ใช้ในการแสดงผลบางส่วนของแอพพลิเคชันแผนกบัญชีมาใช้ หรือบางทีคุณอาจต้องการนำเอาโค้ดมาทำเป็นแพกเก็จเพื่อขายผ่านเว็บหรือแจกจ่ายทางเว็บไซต์ของคุณก็ได้ ASP.NET ทำให้งานนี้ง่ายกว่าเดิมมาก เนื่องจากมันช่วยให้คุณสร้างเซิร์ฟเวอร์คอนโทรลของคุณเองขึ้นมาได้ หรือดึงมาจากประเภทที่มีอยู่เพื่อช่วยให้คุณได้ฟังก์ชันที่ต้องการก็ได้
แนวทางของ DropDownList
สมมติว่าคุณกำลังแก้ไขดาต้าเบส Northwind ใน Microsoft SQL Server อยู่ และคุณต้องการทำให้ผู้ใช้ (สมมติว่าชื่อ Ed ซึ่งเป็นผู้จัดการแผนกจัดซื้อ) สามารถแก้ไขตารางคำสั่งซื้อได้ ฟิลด์อันหนึ่งเก็บข้อมูลการส่งสินค้าเอาไว้ (ShipVia) ซึ่งเป็นสิ่งที่ Ed ต้องการแก้ไขได้ โดยในช่วงที่ทำการแสดงผล ชื่อของบริษัทขนส่งควรแสดงผลเป็นข้อมูลธรรมดา ถ้าหาก Ed คลิกที่ปุ่ม Edit คุณไม่เพียงแต่ต้องการให้เขาสามารถแก้ไขรหัสวิธีการขนส่ง (1,2, หรือ 3) ใน TextBox ได้เท่านั้น แต่คุณยังต้องการให้เขาเห็น DropDownList ที่เก็บชื่อของบริษัทขนส่งซึ่งเขาสามารถเลือกมาใช้ได้ด้วย (Ed จำไม่ได้ว่าบริษัทขนส่งแต่ละบริษัทใช้วิธีการขนส่งแบบใดบ้าง ดังนั้นวิธีนี้จะช่วยเขาได้อย่างมาก)
คอลัมน์ Datagrid ภายใน
เมื่อเราได้รับโจทย์แล้ว ก่อนอื่นเราต้องทำทบทวนคอลัมน์ 5 ประเภทที่ Datagrid สร้างขึ้นมาใน ASP.NET รวมทั้งคลาส parent อย่าง DataGridColumn เสียก่อน
-
BoundColumn: ใช้สำหรับแสดงผลฟิลด์ที่เป็นข้อความมาตรฐานโดยเฉพาะ คอลัมน์นี้จะแสดงผลข้อความธรรมดา แต่จะแปลงไปเป็น TextBox เมื่อ Datagrid เข้าไปอยู่ในโหมด Edit ได้ นอกจากนั้นคุณยังสามารถทำฟอร์แมทบางอย่างได้ด้วย
-
HyperlinkColumn: คอลัมน์นี้ใช้สำหรับแสดงผลข้อมูลที่เป็นข้อความ ซึ่งใช้เป็นตัวแทนของเว็บแอดเดรส (URL) โดยที่ URL อาจจะเหมือนหรือไม่เหมือนข้อความที่แสดงอยู่ก็ได้ ข้อความทั้งสองแบบสามารถกำหนดได้โดยอิสระ การแสดงผลจะอยู่ในรูปของ <a href=...> tag
-
ButtonColumn: คอลัมน์จะยอมให้ผู้ใช้โต้ตอบกับกริดผ่านทางแถวต่างๆ โดยที่คุณอาจแสดงผลเป็น LinkButton แบบไฮเปอร์ลิงก์ (<a href=...>) หรือ Pushbooton (<input type = "button">) ก็ได้ PostBack จะเริ่มทำงานเมื่อมีการคลิกที่ปุ่มตามด้วยการทำงานของ ItemCommand event ใน Datagrid
-
EditCommandColumn: คอลัมน์นี้คล้ายคลึงกับ ButtonColumn แต่มันจะสร้างปุ่มต่างๆขึ้นมาเพื่อใช้แก้ไข Datagrid โดยเฉพาะ รวมทั้งใช้ยกเลิกหรือส่งการเปลี่ยนแปลงที่เกิดขึ้นออกไป ItemCommand จะเริ่มทำงานตามด้วยเหตุการณ์คลิกปุ่มต่างๆเช่น EditCommand, CancelCommand หรือ UpdateCommand
-
TemplateColumn: ใช้สำหรับควบคุมว่าจะแสดงผลคอนโทรลอะไรให้ผู้ใช้ดูบ้าง โดยแบ่งออกเป็นเทมเพล็ตต่างๆ อาทิเช่น ItemTemplate และ EditItemTemplate คุณสามารถใส่คอนโทรล ASP.NET หรือ HTML หรือชุดของคอนโทรลลงไปในเทมเพล็ตเหล่านี้ได้
หมายเหตุ: ก่อนที่คุณจะทำงานกับคอลัมน์ประเภทต่างๆเหล่านี้โดยตรง คุณต้องตรวจสอบให้แน่ใจว่าปิด "การสร้างคอลัมน์อัตโนมัติตอนรันไทม์" (AutoGenerateColumns) แล้ว จากนั้นคุณสามารถทำงานกับคอลัมน์แต่ละประเภทเหล่านี้ได้ใน Property Builder หรือเขียนโค้ด HTML โดยตรงสำหรับไฟล์ ASPX ก็ได้
วิธีการแบบเก่า: DropDownList ใน TemplateColumn ก่อนที่จะเข้าไปเกี่ยวข้องกับการสร้างคอลัมน์ชนิดใหม่ขึ้นมา ก่อนอื่นคุณต้องดูว่าจะแก้ปัญหารายการดรอปดาวน์ได้โดยที่ไม่ต้องใช้คอลัมน์พิเศษใดๆหรือไม่ โดยการทำงานกับ DropDownList
ที่อยู่ภายใน Templatecolumn
โดยตรง ItemTemplate
จะเก็บเฉพาะข้อความธรรมดาที่เป็นตัวแทนของค่าปัจจุบัน ในขณะที่ EditItemTemplate
จะมีคอนโทรล <asp:DropDownList>
ที่คุณนำไปดัดแปลงตอนรันไทม์ได้** code **
โค้ดสำหรับการเชื่อมโยง Datagrid:** code **
การเชื่อมโยง DropDownList
กับ item
ที่กำลังแก้ไขเกิดขึ้นในช่วง ItemDataBound event
ของ Datagrid
โดยเมื่อตอนที่คุณใช้ ItemDataBound event
คุณต้องตรวจสอบให้แน่ใจว่ามีการตรวจสอบ ListItemType
ของ Item
ปัจจุบันแล้ว มิฉะนั้นแล้ว คุณจะหลุดไปทำงานกับ Header Item
หรือ item
ประเภทอื่นๆที่ไม่เหมาะสมได้ คุณต้องอ้างอิงไปยังคอนโทรล DropDownList
เพื่อใช้กับ EditItem
ซึ่งถ้าหากดูจากตัวอย่างโค้ดด้านล่างนี้ ดิฉันได้แสดงวิธีการใช้ control collection
ของเซลโดยตรง (
เพื่อให้สอดคล้องกับตัวอย่างอื่นๆในภายหลัง)
แต่คุณก็สามารถทำเองได้โดยง่ายโดยการกำหนด ID
ให้แก่คอนโทรล DropDownList
และค้นหาตัวอ้างอิงคอนโทรลโดยใช้ FindControl method
ของ DataGrid item
นั้นๆ การที่ Datagrid
เชื่อมโยงกับการแสดงผลเริ่มต้นของ DataTable
ดังนั้นองค์ประกอบแต่ละอันของการแสดงผลดังกล่าวจึงกำหนดเป็นประเภท DataRowView
และคุณสามารถโอน Data Item property
ของ item
ปัจจุบันไปให้ instance
ของ DataRowView
ได้ วิธีการนี้จะช่วยให้คุณอ้างอิงถึงฟิลด์ใน DataItem
โดยตรงโดยใช้ชื่อฟิลด์ ให้คุณใช้เทคนิคนี้ตามด้วยการจัดเก็บค่าปัจจุบันของ "Ship Via"
เอาไว้ในเรกคอร์ดนี้แล้วใช้ค่าดังกล่าวเพื่อเลือกรายการดรอปดาวน์ที่เหมาะสมต่อไป** code **
และท้ายสุด โค้ดที่ใช้เรียกค่าปัจจุบันที่เลือกเอาไว้จาก DropDownList
แล้วระมวลผลอัพเดตย้อนกลับไปหาดาต้าเบส
** code **
จ้าวแห่งคอลัมน์ทั้งมวล: DataGridColumn ขอย้อนกลับมาทบทวนคลาส parent
ของประเภทคอลัมน์ในตัวทั้งหมดกันก่อน คลาสที่ว่าก็คือ DataGridColumn
นั่นเอง (
ดูภาพที่ 1)
คลาสนี้มี properties
และ method
ที่ใช้กับคอลัมน์ทั้งหมดของ Datagrid
ดิฉันได้ใส่เครื่องหมายดาว (*)
ข้างชื่อ properties
ของ method
ที่คุณจะนำไปใช้กับคอลัมน์พิเศษซึ่งคุณสร้างขึ้นมาได้** table **
แนวทางการนำโค้ดกลับมาใช้ใหม่:
การสร้าง DropDownColumn
เรื่องแรกที่คุณต้องทำก็คือการสร้างโครงการ Class Library
ใหม่ขึ้นมาใน Microsoft Visual Studio .NET
แล้วตั้งชื่อว่า MyCustomColumn
ใส่คลาสใหม่ที่ชื่อ DropDownColumn
ลงไป ตรวจสอบให้แน่ใจว่ามีการใส่ namespace
ให้แก่ class definition
แล้ว ดังนั้นโค้ดเบื้องต้นของคุณจะมีหน้าตาลักษณะนี้
** code **
กำหนด public properties อีก 4 อัน เพื่อใช้งานในลักษณะนี้ DataSource:
นี่เป็นชุดข้อมูลที่จะใส่ลงไปใน DropDownList
ข้อมูลอาจเป็นอะไรก็ได้ที่ใช้อินเทอร์เฟซ ICollection
ซึ่งสำหรับตัวอย่างที่ใช้ในบทความนี้ ดิฉันใช้ ArrayList
และ DataView DataField:
นี่เป็นฟิลด์ในแหล่งข้อมูล parent
ของ Datagrid
ที่สอดคล้องกับข้อมูลที่เลือกเอาไว้ในรายการดรอปดาวน์ ตัวอย่างเช่นถ้าหาก DataSource
เก็บข้อมูลชื่อรัฐเอาไว้ DataField
อาจจะเป็นอะไรบางอย่าง อาทิ "StateCode"
หรือฟิลด์ชื่ออะไรก็ตามทีตั้งเอาไว้ในตารางเพื่อใช้กับชื่อรัฐเหล่านี้ DataTextField:
นี่เป็นข้อความที่จะแสดงในรายการดรอปดาวน์ หรืออาจจะตรงหรือไม่ตรงกับค่าที่กำหนดเอาไว้ก็ได้ DataValueField:
นี่เป็นค่าที่เป็นตัวแทนของรายการดรอปดาวน์แต่ละอัน โดยปกติแล้ว DataValueField
มักจะเป็นเลขจำนวนเต็มหรือโค้ดอื่นๆ ในขณะที่ DataTextField
เป็นคำอธิบายที่เป็นข้อความ ที่ผู้ใช้จะเข้าใจความหมายได้ดีกว่า ขั้นต่อมาสร้างเหตุการณ์ขึ้นมาแทนที่ InitializeCell
ซึ่งเป็นเหตุการณ์ปกติของคอลัมน์ Datagrid
โดยที่ InitializeCell
เกิดขึ้นกับเซลตารางทุกอันในคอลัมน์เหมือนกับ ItemCreated event
ที่ทำงานกับ Datagrid
โดยตรง ในตอนนี้คุณสามารถแก้ไขข้อความของเซลอาทิเช่นการกำหนด HeaderText
และการเพิ่มคอนโทรล DropDownList
ที่คุณต้องการใส่ข้อมูลลงไป นอกจากนั้นดิฉันยังได้เพิ่มตัวจัดการ DataBinding event
ของเซลอีกด้วย ซึ่งจำเป็นต้องประมวลผลต่างออกไปขึ้นอยู่ว่าแถวกำลังมีการแก้ไขอยู่หรือไม่ ส่วน System.Web.UI.Control
ทุกอันมี DataBinding event
เป็นของตนเอง และตรงจุดนี้ก็คือจุดที่คุณสามารถเรียกใช้ข้อมูลที่อยู่ในนั้นได้ ขณะที่ข้อมูลถูกเชื่อมโยงไปหาคอนโทรล ซึ่งในกรณีนี้ก็คือออปเจ็กต์ TableCell
ที่อยู่ภายใน Datagrid** code **
ขั้นต่อมาก็คือรูทีน ItemDataBinding
ซึ่งจะเริ่มทำงานเมื่อแต่ละ Item
หรือ Alternating Item
ที่อยู่ใน Datagrid
มีการเชื่อมโยงกับข้อมูล ในตอนนี้คุณจำเป็นต้องอ้างอิงกลับไปยัง TableCell
ที่มีการเชื่อมโยงข้อมูลอยู่ ซึ่งคุณสามารถทำในรูปของการส่งออปเจ็กต์ "sender"
ไปยังเหตุการณ์ก็ได้ บวกกับการอ้างอิงไปยัง DataGridItem
ปัจจุบัน โดยใช้ NamingContainer property
ของ TableCell
ซึ่งจากจุดนี้คุณสามารถแสดงผลข้อมูลของ DataField
เป็นข้อความธรรมดา เหมือนในกรณีที่ฟิลด์นี้ถูกนำไปแสดงผลใน BondColumn
ก็ได้ ท้ายสุดดิฉันมักจะส่งคำเตือนฉันท์มิตรออกไปถ้าหากฟิลด์ที่พวกเขากรอกลงไปไม่มี มิฉะนั้นแล้ว พวกเขาจะได้คำเตือนแบบกว้างๆว่า "
อินเดกซ์อยู่นอกขอบเขต"
เท่านั้น** code **
ขั้นต่อมาคุณต้องเขียนโค้ดสำหรับ EditItemDataBinding event
ซึ่งจะเกิดขึ้นกับเซลคอลัมน์พิเศษของเรา เมื่อมีแถวใดแถวหนึ่งเข้าสู่โหมด Edit
คุณต้องทำการอ้างอิงไปยังเซลปัจจุบันอีกครั้ง และใส่คอนโทรล DropDownList
ลงไปในช่วง InitializeCell method
ให้คุณใส่รายการว่างๆเป็นตัวเลือกแรกของ DropDownList
โดยจะมีการเลือกรายการนี้ถ้าหากข้อมูลที่อยู่ในคอลัมน์ปัจจุบันไม่ตรงกับ item
ที่คุณใส่เอาไว้ในรายการจากชุด DataSource
จากนั้นคุณจำเป็นต้องกำหนดประเภทของชุดข้อมูลที่ส่งเข้ามา ซึ่งในจุดมุ่งหมายของตัวอย่างนี้ ดิฉันจะจัดการกับสองกรณี ก็คือชุดของสตริงที่ส่งเข้ามาในรูปของ ArrayList
หรือ DataView
จากตารางข้อมูล ที่ใช้เป็น item
ที่อยู่ใน DataRowView
ถ้าหากเป็นข้อมูลสตริง ดิฉันจะใส่ ListItem
ใหม่ลงไป จากนั้นกำหนดทั้งค่าและข้อความของรายการดรอปดาวน์ ข้อความอธิบายเป็นสิ่งที่จำเป็นอย่างมากตรงจุดนี้ เนื่องจากเหตุการณ์ทั้งสองเหมือนกัน แต่ดิฉันจะเลือก item
ที่เหมาะสมโดยดูจากค่าเพื่อให้สอดคล้องกับตัวอย่างต่อไป ซึ่งจะเป็นการกำหนด value property
แยกต่างหาก ส่วน DataRowView item
ดิฉันเคยพูดเอาไว้ในตัวอย่างก่อนหน้านี้แล้วว่า DataRowViewInstance ("FieldName")
ส่งออปเจ็กต์ที่เป็นตัวแทนข้อมูลของฟิลด์กลับมา แนวทางเดียวกันนี้สามารถใช้ในการดึงค่าสำหรับ DataTextField
และ DataValueFields
ได้เช่นกันท้ายสุด ใส่ข้อยกเว้นสองสามอย่างลงไปเพื่อจัดการกับความผิดพลาดพื้นฐานที่นักพัฒนาอาจจะทำเมื่อมีการใช้คอลัมน์ดังกล่าว อาทิเช่นการส่งชื่อฟิลด์ที่ไม่ถูกต้องไปยัง DataField property
หรือส่งประเภท DataSource
ที่ไม่คอมแพตทิเบิลเข้ามาเป็นต้น ดิฉันเขียนโค้ดให้ข้อความลอยขึ้นไปข้างบน แต่หวังว่าถ้าหากเป็นแอพพลิเคชันจริงแล้ว คุณควรที่จะเก็บข้อความเหล่านี้เอาไว้ในจุดที่แก้ไขได้ง่ายกว่า อาทิเช่นในไฟล์ web config
เป็นต้น หรือเก็บเอาไว้ในไฟล์ทรัพยากร ถ้าหากคุณต้องการใช้แอพพลิเคชันแบบโกบอล นอกจากนั้นคุณไม่จำเป็นต้องใส่คำเตือน "
ไม่เจอ DataField
ที่ระบุ"
เอาไว้ตรงนี้ เนื่องจาก ItemDataBinding event
จะเป็นตัวจัดการเรื่องนี้อยู่แล้ว ก่อนที่ Datagrid
จะถูกใส่ลงไปในโหมด Edit
** code **
การใช้ DropDownColumn ในตอนนี้เมื่อคุณเห็นโค้ดที่จำเป็นทั้งหมดสำหรับการสร้างคลาส DropDownColumn
แล้ว ถ้าอย่างนั้นเราลองมาดูกันว่าจำเป็นต้องทำอะไรบ้าง เพื่อนำเอาคอนโทรลตัวนี้ไปใช้ในแอพพลิเคชัน ถ้าหากคุณอ่านบทความนี้ที่บ้านและไม่เคยลองเขียนโค้ดตามบทความนี้มาก่อน ให้คุณสร้าง namespace
ตามตัวอย่างด้านบนไปใส่เอาไว้ในไฟล์ MyCustomColumn.dll
แล้วก็อปปี้ไปใส่ไว้ในโฟลเดอร์ /bin
ของแอพพลิเคชันที่คุณต้องการทดสอบ ในขณะที่ตัวอย่างของดิฉันเป็นการสร้างเว็บแอพพลิเคชันใหม่ขึ้นมาชื่อ UseCustomColumn
แล้วเพิ่มการอ้างอิงลงไปในไฟล์ MyCustomColumn.dll
ที่อยู่ในไดเรกทอรี /bin
ซึ่งบริเวณด้านบนสุดของไฟล์ ASPX
ให้ใส่ @Register directive
ลงไปด้วย** code **
หมายเหตุ:
ประเภทคอลัมน์ชนิดใหม่จะไม่ปรากฏใน Visual Studio .NET Property Builder
สำหรับ Datagrid
ตัวนี้ ดังนั้นคุณต้องเข้าไปในหน้าจอ HTML
แล้วใส่การกำหนดคอลัมน์เอาไว้ตรงนี้ คุณต้องตรวจสอบให้แน่ใจว่าการกำหนด Datagrid
มีการใส่ <from runat = "server">...</form> tags
ลงไปด้วย ซึ่งเป็นสิ่งที่จำเป็นสำหรับจัดการกับ PostBacks
ไฟล์ ASPX
ที่เหลือจะมีหน้าตาแบบนี้** code ** Datagrid
จะถูกเชื่อมโยงเข้าหาตาราง Orders
ตามตัวอย่าง Northwind
และ DropDownColumn
พิเศษจะเชื่อมโยงเข้าหาคอลัมน์ ShipVia
ในตอนนี้สิ่งที่ดิฉันต้องทำก็คือการกำหนด DataField property
ขณะที่ดิฉันเชื่อมโยงเข้าหา ArrayList
แบบง่ายๆ ในขณะที่ DataTextField
และ DataValueField properties
ไม่จำเป็น การกำหนดออปชัน ArrayList
จะง่ายขึ้นอีกมาก ถ้าหากคุณมีรายการข้อมูลที่ไม่มีการเปลี่ยนแปลงกำหนดเอาไว้ก่อนแล้ว หรือคุณอาจกำหนดออปชันขึ้นมาใหม่เองก็ได้ การกำหนด DataSource
สำหรับ DropDownColumn
จะอยู่ในรูปของโค้ด ก่อนอื่นคุณต้องทำการอ้างอิง DropDownColumn
เสียก่อน** code **
ขั้นต่อมา ดิฉันต้องแปลงตัวอย่างนี้เพื่อให้ใช้ข้อมูลสดๆจากตารางดาต้าเบสได้ โดย ShipVia
กำหนดให้เป็น foreign key
เพื่อค้นหาข้อมูลในตาราง Shippers
ที่ดิฉันกำหนดให้เป็น DataSource
สำหรับ DropDownColumn
ในโค้ดนี้ นอกจากนั้นดิฉันยังจำเป็นต้องแก้ไขการกำหนดตัวแปรใน DropDownColumn
ให้มีการใส่ชื่อ DataTextField
และ DataValueField
ที่สอดคล้องกับฟิลด์ในตาราง shippers
ลงไปด้วย** code **
จากนั้นทำการเชื่อมโยงตาราง Orders
เข้าหา Datagrid
และสร้าง Shippers
เข้าหาคอลัมน์พิเศษ** code **
เมื่อได้รับข้อมูลแล้ว DataGridColumn
จะเลือก item
ที่เหมาะสมจาก DropDownList
เองโดยอัตโนมัติ โดยดูจากค่าต่างๆ (1,2
หรือ 3)
ในตาราง Orders
แบบนี้ขั้นตอนสุดท้ายของการใช้ DropDownColumn
ก็คือการดึงค่าที่เลือกเอาไว้ให้ส่งกลับไปอัพเดตดาต้าเบส วิธีการก็คือแค่ทำการอ้างอิงไปยังคอนโทรล DropDownList
ที่อยู่ภายในเซลเท่านั้นเอง จากนั้นกำหนด SelectedValue property
ด้วย
** code **
สรุป ทั้งหมดนี้ก็คือการสร้างประเภทคอลัมน์ชนิดใหม่ขึ้นมาจาก DataGridColumn
ซึ่งในขณะที่สร้างขึ้นมาก็ให้ทำการเชื่อมโยงข้อมูลไปพร้อมๆกันด้วย จากนั้นคุณก็สามารถนำโค้ดชุดนี้ไปใช้กับแอพพลิเคชันจริงได้แล้ว นี่เป็นแค่ตัวอย่างหนึ่งของการนำเอาคอลัมน์ Datagrid
ไปใช้ซ้ำได้ สิ่งที่ถือเป็นความท้าทายที่รอคุณอยู่ก็คือการตรวจสอบแอพพลิเคชันของคุณเองว่ามีฟังก์ชันใดที่คุณมักใช้ซ้ำๆ ซึ่งคุณสามารถนำไปสร้างเป็นคอลัมน์ Datagrid
พิเศษของคุณเองขึ้นมาได้ คุณสามารถพัฒนาคอลัมน์ขึ้นมาใช้สำหรับงานพื้นฐานทั่วไป อาทิเช่น DropDownList
ในคอลัมน์หรือใช้เป็นฟังก์ชันพิเศษเฉพาะภายในองค์กรของคุณก็ได้ คุณไม่จำเป็นต้องจำกัดตัวเองโดยการใส่แค่คอนโทรล ASP.NET
ลงไปในคอลัมน์พิเศษของคุณเท่านั้น คุณสามารถจัดทำโครงสร้างที่มีความซับซ้อนขึ้นมาได้ อาทิเช่นการนำเอาคอนโทรลอื่นๆ ข้อมูลจากบริษัทอื่น ๆหรือคอนโทรล Datagrid
ทั้งหมดที่อยู่ภายในคอลัมน์ของคุณมาซ้อนกัน เพื่อสร้างเป็นข้อมูลที่แยกสาขาก็ได้ โดยคุณสามารถใช้จินตนาการได้อย่างอิสระประเภทคอลัมน์ในตัวทั้ง 5
ชนิดที่มีอยู่แล้วจัดเป็นสิ่งที่มีประโยชน์อย่างมาก คอลัมน์เหล่านี้สามารถสนองตอบต่อความต้องการในการแสดงผลส่วนใหญ่ได้ขณะที่ทำงานกับคอนโทรล Datagrid
อย่างไรก็ตามถ้าหากคุณไม่ได้พัฒนาคอนโทรลของคุณเองขึ้นมา คุณก็จะไม่มีโอกาสนำเอารูปแบบแปลกๆไปใช้ใน TemplateColumn
อย่างอิสระได้ การสร้างคอลัมน์พิเศษขึ้นมาจะช่วยให้คุณเป็นอิสระจากข้อจำกัดเหล่านี้ และคุณจะมีโอกาสเพิ่มฟังก์ชันชั้นยอดลงไปในแอพพลิเคชัน Datagrid
ของคุณได้
แหล่งข้อมูลอ้างอิง MetaBuilders.com:
คอลัมน์ Datagrid
พิเศษแจกฟรี รวมทั้งซอร์ซโค้ดด้วย (C#) DatagridGirl.com:
ความรู้ทุกอย่างเกี่ยวกับ Datagrid
ASP.NET Data Web Controls แต่งโดย Scott Mitchell, SAMS, 2003, ISBN 0672325012