Author: sirima.sa

  • Excel : ลำดับที่แบบตัวเลขด้วยคำสั่งง่าย ๆ ไม่ต้องลากเมาส์!

    เคยไหม ที่พยายามใส่เลข 1-100 ใน Column ใด ๆ เอง ด้วยวิธีการต่าง ๆ แบบนี้

    บางคนใช้วิธีพิมพ์เอง 😒

    บางคนใช้วิธีพิมพ์เลข 1 2 3 คลุมแล้วลาก 😂

    แต่!!! จะดีกว่าไหม ถ้ามีวิธีที่เร็วและเราสามารถระบุได้ว่าจะสิ้นสุดที่เลขใด 😍 มาดูวิธีกันเลยค่ะ

    ใน Cell A1 พิมพ์คำสั่งดังนี้ค่ะ

    =SEQUENCE(xx) โดยที่ xx คือจำนวนที่เราต้องการให้เลขแสดงถึง

    แล้วกดปุ่ม Enter!

    โดยตัวอย่างในวีดีโอ ให้แสดงถึงเลข 20 ดังนั้นคำสั่งจึงเป็นดังนี้ค่ะ

    =SEQUENCE(20)

    เพียงเท่านี้ คุณก็จะได้ Running Number จาก 1-100 โดยที่ไม่ต้องลากเมาส์แล้วค่ะ 😁👍💖

    หวังว่าโพสนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ แล้วพบกันใหม่ค่าาา

  • Screen Recording with Xbox Game Bar

    หลาย ๆ ครั้งที่เราต้องการอัดวิดีโอหน้าจอ เพื่อนำไปนำเสนองาน ไม่ว่าจะเป็นการเขียน Blog ทั้งหลาย เพื่อให้ผู้อ่านเห็นวิธีการชัดขึ้น เมื่อเทียบกับการ Capture ภาพปกติ 💖

    และเป็นอีกหลาย ๆ ครั้งที่หลาย ๆ คนต้องหาโปรแกรมฟรีต่าง ๆ เพื่อมาทำสิ่งนี้ 😂

    แต่เดี๋ยวก่อน!!! ทางผู้เขียนมีโปรแกรมติดเครื่อง Window10 หรือแม้จะใช้ Window11 ก็ยังมี นั่นก็คือ

    Xbox Game Bar

    ใช่ค่ะ ทางผู้เขียนไม่ได้ให้เชิญชวนท่านมาเล่นเกมนะคะ แต่จะอะแด๊บแอปพลายเพื่อจะนำมาใช้ในการทำ Screen Recording ค่า 😁

    แต่เนื่องจากโปรแกรมนี้ไม่สามารถ Screen Recording Window Desktop หรือ File Explorer ได้ สำหรับ Blog นี้จึงจำเป็นต้องใช้ภาพประกอบแทนวิดีโอนะคะ วิธีการเป็นยังไง ไปดูกันเล้ยยยย 😎

    ขั้นตอนแรก ไปเปิดการใช้งานก่อนเลยค่ะ เริ่มจาก กดปุ่ม window พิมพ์ setting ที่เมนูฝั่งซ้าย เลือกเมนู Gaming จากนั้นที่เมนู Open Xbox Game Bar using this button a controller เลือก on

    เริ่มต้นใช้งาน ก่อนที่จะเริ่มบันทึก ให้อยู่ที่หน้าจอที่จะบันทึกก่อน จากนั้นกดคีย์ลัด windows key+G เพื่อเรียก Xbox Game Bar หรือจะกดปุ่ม window พิมพ์ xbox จากนั้น เลือก Xbox Game Bar ก็ได้ทั้ง 2 วิธีค่ะ แต่แนะนำคีย์ลัดสะดวกกว่าค่ะ👌

    เมื่อกดแล้วจะพบหน้าต่างมากมายดังรูปด้านล่างค่ะ

    จากนั้นที่หน้าต่างเล็ก ๆ ที่ชื่อว่า Capture ให้กดปุ่มที่ 3 เพื่อเริ่มต้นอัดวิดีโอดังภาพด้านล่าง

    เมื่อกดปุ่มเริ่มอัด จะมีหน้าต่างเล็ก ๆ มีเวลานับแสดงแบบนี้ค่ะ

    เมื่ออัดเสร็จกดปุ่มหยุด จากนั้นไฟล์วิดีโอจะถูกบันทึกไว้ที่ This PC -> Videos -> Captures

    หมายเหตุ ผู้เขียนใช้ Window 11 นะคะ แต่ Window10 ก็ไม่ต่างกันมากค่ะ

    Tips สามารถกดปุ่ม windows key+alt+r เพื่อเริ่มต้นอัดวีดีโอได้โดยไม่ผ่านขั้นตอนข้างต้น 😁😁

    หวังว่าเนื้อหารอบนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ แล้วเจอกันใหม่ค่าาา ❤️😘

  • Crystal Report : Report หลายตัวหัวท้ายต่าง แต่ตรงกลาง Code เหมือนกัน จัดการอย่างไร (WinApp)

    หลาย ๆ ครั้งที่ท่านมีรายงานมากกว่า 1 ฉบับที่มีรูปร่างหน้าตาส่วนหัวกระดาษหรือท้ายกระดาษที่ต่างกัน แต่ส่วนของ Detail นั้นเหมือนกันอย่างกับแกะ และเจ้าส่วน Detail นี้ ดั๊นนนน เป็นเจ้า Detail ที่มีเงื่อนไขเยอะแยะ ยุบยับซับซ้อนซ่อนเงื่อน ถ้าจะให้สร้าง File เพื่อวาง Report Viewer เป็น 2 File หรือตามจำนวนรายงานก็ใช่ที่

    จากการที่ประสบพบเจอมากับตัว ส่วนหัว ส่วนท้าย ดั๊นนน ไม่คล้ายไม่เหมือนเลย แต่ข้อมูลตรงกลางนั้น ต้องใช้ข้อมูลชุดเดียวกัน เหมือนกัน ทีนี้ถึงกับกุมขมับเลยว่าจะทำยังไงดี ได้คำปรึกษาแนะนำจากพี่ชายที่แสนดี @wachirawit-j มาช่วยชี้แจงแถลงไข ถึงต้องรีบจัดการเก็บข้อมูลไว้ เผื่อครั้งหน้าเจออีกแล้วลืมจะได้กลับมาอ่านซ้ำ ไปดูกันเล้ยยยยยย

    ReportClass cr = new ReportClass();

    ตัวแปร cr ที่ประกาศนี้ จะเป็นตัวแปรที่ไว้ใช้ในอนาคตทั้งไฟล์ เป็นตัวแปรที่เป็นตัวเก็บค่าว่า จะเป็น Crystal Report File ตัวไหนและใช้สำหรับกำหนดค่า FormulaField เพื่อใช้กับ Report File นั้น ๆ ตัวอย่าง

    cr.DataDefinition.FormulaFields["ffType"].Text = "'Normal'";

    Code ข้างต้นเป็นการกำหนดค่าให้กับ Formula Field ที่ชื่อว่า ffType ในฝั่ง Crystal Report โดยกำหนดให้มีค่าเท่ากับข้อความว่า “Normal” ซึ่งจะเห็นว่ามีการใช้ตัวแปร cr ในการดำเนินการ

    Code ส่วนอื่น ๆ ที่มีการกำหนดค่าก็จะมีการเรียกตัวแปร cr นี้เหมือนกัน ซึ่ง cr จะเป็นตัวที่บอกว่าคือ Crystal Report File ไหน

    private class CRModel
    {
       public RptNormal crNormal {get; set;}
       public RptSpecial crSpecial {get; set;}
    }

    Code ข้างต้นเป็นการสร้าง Class ชื่อว่า CRModel มีสมาชิกภายใน Class 2 Report นั่นคือ RptNormal.rpt กำหนดให้ใช้ตัวแปร crNormal และ RptSpecial.rpt กำหนดให้ใช้ตัวแปร crSpecial

    จากนั้นในส่วนของการตรวจสอบว่าจะใช้ Report ตัวไหนหรือการกำหนด report ให้กับ Reportsource เป็นดังนี้

    if(rptType == "normal") //ตรวจสอบว่าเป็นรายงานประเภทปกติ?
    {
       crModel.crNormal = new RptNormal(); //กำหนด crNormal ให้เป็นรายงาน RptNormal
       SetValue(crModel, rptType); //เรียก Method กำหนดค่าต่าง ๆ ในรายงาน
       crystalReportViewer1.ReportSource = crModel.crNormal; //กำหนด Reportsource ให้มีค่าเป็น crNormal
    }
    else
    {
       crModel.crSpecial = new RptSpecial(); //กำหนด crNormal ให้เป็นรายงาน RptSpecial
       SetValue(crModel, rptType); //เรียก Method กำหนดค่าต่าง ๆ ในรายงาน
       crystalReportViewer1.ReportSource = crModel.crSpecial; //กำหนด Reportsource ให้มีค่าเป็น crSpecial
    }
    private void SetValue(CRModel objCR, string rptType)
    {
       if(rptType == "normal")
       {
          cr = objCR.crNormal
       }
       else
       {
          cr = objCR.crSpecial
       }
    
       #Region Code ส่วนกำหนดค่าให้กับ cr 
    
          cr.DataDefinition.FormulaFields["ff1"].Text = "'123'";
          cr.DataDefinition.FormulaFields["ff2"].Text = "'456'";
    
       #endRegion
    }

    เพียงเท่านี้ก็จะสามารถจัดการ Code ที่ File เดียวได้แล้ว เย้!

    ถ้าผู้อ่านมีวิธีที่ดีกว่า สะดวกกว่า สามารถแนะนำได้นะคะ จะขอบคุณยิ่งเลยค่า ^/\^ และหวังว่าจะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ จนกว่าจะพบกันใหม่ สวัสดีค่ะ 🙂

  • Crystal Report : รูปที่ใส่ไป ทำไม size ถึงกลับไป(ใหญ่)เท่าเดิม

    เคยหรือไม่ ที่ใส่รูปลงไปในรายงาน จากนั้นหากต้องการ Config ค่าของรูปนั้น เมื่อจัดการเสร็จ กด OK ออกมา รูปที่ท่านใส่ไปนั้น กลับขยายกลายร่างกลับสู่ขนาดจริง

    ซึ่งบางครั้งหากท่านไม่ได้มีการย่อขนาดรูปให้ตรงตามที่ต้องการก่อนแต่ใช้วิธี Config ในส่วนของ Object Picture แทน ท่านอาจจะเจอปัญหานี้กันบ้าง

    วิธีแก้ไขง่ายมากๆๆๆๆๆๆๆ หลาย ๆ ท่านอาจจะคาดไม่ถึง หรือหลาย ๆ ท่านอาจจะรู้แล้ว แต่ผู้เขียนเพิ่งได้กลับมาจับ Crystal Report อีกครั้ง ได้เจอปัญหานี้เข้า เลยอยากมาแชร์ และเป็นการบันทึกไว้อ่านเองด้วย มาดูกันเลยค่ะว่า วิธีจัดการมีขั้นตอนอย่างไร ท่านผู้อ่านอย่าเพิ่งตกใจกับความง่ายยยยยยย นี้นะคะ ไปกันเล้ยยยยย ^^

    เมื่อท่านลาก Object Picture มาแล้ว ให้เลือก Menu Format Object ที่ ๆ ท่านเข้าไป Config รูปปกติค่ะ

    จากนั้นที่ Tab Picture เมื่อท่านตั้งค่าทุกอย่างเสร็จแล้วอย่าเพิ่งกดปุ่ม OK นะคะ เบรกก๊อนนน ><

    ให้สลับกลับไปที่ Tab Common ก่อนค่ะ

    สังเกตดี ๆ นะคะ ที่วงไว้สีแดง ๆ หนา ๆ ตัวนี้เลยค่ะ Can Grow เจ้าปัญหา ให้กลับมาดูก่อนนะคะ ว่ามีเครื่องหมายถูกอยู่ข้างหน้ารึเปล่า ถ้าไม่มี ไม่เป็นไรค่ะ นั่นคือสิ่งที่ถูกต้องแล้ว ให้กด OK ออกได้เล้ยยย แต่ถ้ามีเครื่องหมายถูกอยู่ เอาออกด่วน ๆๆๆๆ เลยค่ะ ไม่งั้น รูปที่ท่านใส่ไว้ ก็จะ Grow กลับสู่ขนาดดั้งเดิม ซึ่งหากท่านใส่ไว้แบบไม่ปรับขนาดมาก่อน แล้วมีขนาดใหญ่มาก ก็จะเป็นปัญหาได้ค่ะ

    หวังว่าจะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ 🙂

  • Crystal Report : Term & Condition หรือ Privacy Policy ที่ต้องมีต่อท้ายรายงาน ทำได้อย่างไร

    หลาย ๆ ครั้งที่เราพิมพ์เอกสาร แล้วจำเป็นต้องมีเอกสารแนบท้ายกระดาษเป็นพวก Term & Condition หรือ Privacy Policy

    ซึ่งเอกสารพวกนี้จะอยู่ท้ายสุดของเอกสาร และทุกครั้งเมื่อมีการพิมพ์เอกสารชุดอื่น ๆ ก็จำเป็นต้องมีเอกสารเดียวกันนี้แนบท้ายไป

    เนื่องจากช่วงนี้ได้มีการเข้ามาจับ Crystal Report อีกครั้ง จึงได้มีโอกาสได้ทำเอกสารแนบท้ายนี้ จึงต้องการเขียนไว้สำหรับเตือนความจำและอยากส่งต่อให้กับผู้ที่กำลังทำได้ทราบต่อไป

    อ่ะ เรามาเริ่มกันเลย อันดับแรก เริ่มจากสร้างรายงานที่เป็นไฟล์เอกสารแนบท้าย สร้างและจัดรูปแบบให้เรียบร้อย เพราะต่อไปนี้ ไฟล์เอกสารแนบท้ายเหล่านี้ จะกลายไปเป็น Subreport ของรายงานหลัก โดยไปที่ส่วนของ Report Footer คลิกขวา เลือก Insert -> Subreport

    ระบบจะมีหน้าต่าง Subreport มาให้ระบุไฟล์ Crystal Report ที่ต้องการให้เป็น Subreport ซึ่งให้เลือกไฟล์ที่เราสร้างไว้

    จากนั้นจะได้ Subreport วางไว้ในส่วนของ Section Report Footer เรียบร้อย

    ขั้นตอนต่อไปเป็นการ Config ให้สามารถแสดง Subreport เป็นหน้าสุดท้ายโดย คลิกขวาที่แถบ Section เลือก Section Export ไปที่ Report Footer -> Tab Paging ให้ ทำเครื่องหมาย / หน้า New Page Before

    แต่เนื่องจากเราวาง Subreport ไว้ที่ Section Report Footer ทำให้เมื่อลอง Preview จะพบว่า หัวกระดาษและท้ายกระดาษส่วนอื่นแสดงด้วย ดังนั้นเราต้องมาจัดการในส่วนอื่น ๆ โดยเขียน Formula ใน Section อื่น ๆ ที่แสดงทุกหน้า เช่น Section Report Header, Section Page Header เป็นต้น ในที่นี้จะจัดการส่วน Section Page Header a จากนั้นทางขวา ในส่วนของ Suppress คลิกที่ x-2 เพื่อทำการเขียน Formula

    จะพบหน้าต่าง Formula จากนั้น เขียนคำสั่งดังภาพด้านล่าง ซึ่งเป็นคำสั่งตรวจสอบว่า ถ้าหน้าปัจจุบัน คือหน้าสุดท้าย ให้ทำการซ่อน Section Page Header จากนั้นกด Save and close เพื่อปิด และเขียนคำสั่งเดียวกันนี้ใน Section ส่วนอื่น ๆ ที่ต้องการซ่อนในหน้าสุดท้ายจนครบ

    จากนั้นทดลอง Run ดูจะพบว่า หน้าสุดท้ายที่ต้องการให้แสดง Term & Condition หรือ Privacy Policy จะไม่มี Section ส่วนอื่นมากวนใจ

    หวังว่าบทความนี้จะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ 🙂

  • Word : การปรับรูปแบบ font สารบัญตามที่เราต้องการ

    กลับมาอีกครั้งกับเรื่อง Word สืบเนื่องมาจาก Blog ที่แล้วที่กล่าวถึงเรื่องการได้มีส่วนช่วยเพื่อนร่วมงานในการทำคู่มือ จึงได้มีโอกาสในการใช้งาน Word ซึ่งปัญหาที่พบอีกเรื่องก็คือ Font สารบัญ ไม่ใช่รูปแบบ Font ที่ต้องการคือ TH SarabunPSK ผู้เขียนจึงได้เขียนเรื่องนี้ขึ้นมาเพื่อที่ผู้อ่านจะสามารถนำไปใช้งานได้

    ตัวอย่าง ผู้เขียนได้ทำการสร้างเนื้อหาทดสอบ ใน Style Heading และใส่สารบัญเรียบร้อย ดังภาพ จะเห็นได้ว่า Font ในเนื้อหา เป็น TH SarabunPSK ตามที่ตั้งค่าใน Style Heading1 ไว้ตามที่ต้องการ แต่ส่วนสารบัญนั้นเป็น Font แปลก ๆ ไม่ใช่ Font ที่เราต้องการ

    เริ่มทำการเปลี่ยน Font โดยไปที่ที่เราเลือกสารบัญแบบอัตโนมัติมาใส่ คือไปที่ Menu References -> Table of Contents -> Custom Table of Contents…

    จะพบหน้าต่าง Modify Style ที่ส่วนล่างซ้าย เลือก Format -> Font

    ที่หน้าต่าง Table of Contents มุมล่างขวา เลือก Modify… เพื่อเข้าไปแก้ไขรูปแบบ Font

    จากนั้นหน้าต่าง Style เลือก Level สารบัญที่ต้องการแก้ไขรูปแบบ ในที่นี้เลือกแก้ไขสารบัญ Level 1 จากนั้นกดปุ่ม Modify

    เรื่องน่ารู้

    TOC ย่อมาจาก Table of Contents ซึ่งก็คือ สารบัญนั่นเอง

    จะพบหน้าต่าง Font นี่คือ Font ตั้งต้นที่เราได้ จะเป็นว่าไม่ใช่สิ่งที่เราต้องการ แก้ไขได้เลย

    แก้ไขให้เป็น Font ที่เราต้องการทั้ง 2 จุด คือ Latin Text และ Conplext scripts จากนั้น กดปุ่ม OK ออกมาเรื่อย ๆ

    กลับออกมาจนเกือบจะถึงขั้นตอนสุดท้าย จะมีหน้าต่างถามว่า จะเปลี่ยนจริง ๆ ละนะ จะทับของเดิมละนะ ตอบ Yes ไปเล้ย

    แถ่นแท๊นนน ผลลัพธ์สุดท้าย สวยงามอย่างที่เราต้องการ เย้!

    หวังว่าเนื้อหาเรื่องนี้คงจะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ ขอบคุณค่าา 😀😍

  • Word : การใส่รูปแบบเลขหน้าที่ต่างกันในไฟล์เดียวกัน

    เคยไหมที่เวลาผู้อ่านจะสร้างคู่มือหรือเอกสารที่ต้องมีคำนำ สารบัญ ต่อด้วยเนื้อหา อาจจะจบด้วยภาคผนวก

    ซึ่งแต่ละส่วนนั้นมีการแสดงเลขหน้าที่ไม่เหมือนกัน ส่วนคำนำ สารบัญ อาจจะใช้เลขหน้าเป็นตัวอักษร เช่น ก, ข

    แต่ส่วนเนื้อหาใช้ตัวเลขอารบิค

    ในช่วงนี้ ผู้เขียนได้มีการช่วยเหลือเพื่อนร่วมงานในเรื่องนี้ในการทำคู่มือจึงได้นำลงมาใส่ไว้ใน Blog เผื่อเป็นประโยชน์แก่ท่านผู้อ่าน

    ตัวอย่าง ผู้เขียนสร้างเนื้อหามา 2 บรรทัดเพื่อเป็นเนื้อหาทดสอบในการใส่เลขหน้า

    จากนั้นทำการใส่ตัวแบ่งหน้า โดยเลือกเป็น Section Breaks -> Next Page

    จากนั้นใส่เลขหน้าเป็นเลขอารบิคปกติ เลขหน้าจะเริ่มที่หน้าที่ 1 และ 2 ไปเรื่อย ๆ

    จากนั้นผู้อ่านของดูที่แถบ Ribbon ใน Tab Header & Footer และพบเมนู Link to Previous ซึ่งจะเป็นว่าเมนูนี้ถูกไฮไลท์อยู่

    นั่นคือ เลขหน้าจะต่อเนื่องจาก Section ก่อนหน้า ให้เลือกเมนูนี้อีกครั้ง เพื่อเอาการ Link กับ Section ก่อนหน้าออก

    จากนั้นลบเลขหน้าที่หน้าที่ 2 ออก จากนั้นไปที่เมนู Page Number -> Format Page Number เพื่อทำการเลือกรูปแบบตัวเลขที่ต้องการใส่ใหม่ ในที่นี้ต้องการใส่เลขหน้าเป็นตัวอักษรภาษาไทย

    เมื่อพบหน้าต่าง Page Number Format ให้ทำการเลือกรูปแบบเลขหน้าที่ Number format จากนั้น ที่ Page numbering ในเลือกเป็น Start at โปรแกรม Word จะเลือกค่าโดยปริยายเป็น “ก” มาให้

    จากนั้นกด OK ผู้อ่านลองเลือกแผ่นกระดาษดูจะพบว่า เลขหน้าได้ทำการเปลี่ยนให้เป็นที่เรียบร้อย

    ผู้เขียนหวังว่าเนื้อหาเรื่องนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อย ขอบคุณค่ะ 😀😍

  • Word : วิธีแก้ Repeat Header Table แล้ว word ดื้อ ไม่ยอม Repeat ให้

    เคยไหม กด ✔ ที่คำสั่ง Repeat as header row at the top of each page แล้ว ตารางนั้นก็ยังไม่ยอมแสดงหัวตารางในหน้าถัดไปเสียที

    ช่วงนี้หลังจากที่ผู้เขียนได้มีช่วงเวลาในการที่ปั่นเอกสาร รวมถึงเพื่อน ๆ ที่เจอปัญหาได้สอบถามกันเข้ามาเกี่ยวกับเรื่องนี้ ผู้เขียนจึงเห็นว่าน่าจะนำมาเขียน Blog เผื่อผู้อ่านท่านใดที่ติดปัญหาเช่นเดียวกัน จะได้ลองนำไปใช้ดูเผื่อแก้ปัญหาได้

    หลัก ๆ แล้วปกติ เมื่อผู้อ่านสร้างตารางขึ้นมา เมื่อต้องการให้ข้อมูลสองแถวแรกเป็นหัวตาราง ผู้เขียนจะทำการคลุมสองแถวนั้น จากนั้นคลิกเมาส์ขวา เลือกเมนู Table Properties… ดังภาพด้านล่าง

    จากนั้นที่ Tab Row ให้ ✔ ที่คำสั่ง Repeat as header row at the top of each page เพื่อเป็นการบอกว่า จะทำให้ตาราง 2 แถวแรกเป็นหัวตารางจากนั้นกด OK

    แต่เมื่อกลับมาหน้าตาราง ทำไมหัวตารางถึงยังไม่มีล่ะ????? 🤔

    งั้นต้องมาตรวจสอบเพิ่มเติมกันหน่อย โดยลองทำการคลุมสองแถวนั้นเหมือนเดิม จากนั้นคลิกเมาส์ขวา เลือกเมนู properties แต่ตอนนี้ไปเลือกที่ Tab Table สังเกตที่กลุ่ม Text wrapping ถ้าของผู้อ่านท่านใดเป็นแบบรูปด้านล่างคือเลือกอยู่ที่ Around นั่นคือปัญหา 😫😤

    ลองเปลี่ยนเป็นเลือก None ตามรูปด้านล่างดูค่ะ

    แทน แท๊นนนนนนนนนนนนนนนนน *0*

    ตารางของเรามีหัวตารางตามที่เราต้องการแล้ว เย้!!!!!!! 🎉🎊✨

    หวังว่าคงจะมีประโยชน์กับผู้อ่านไม่มากก็น้อยนะคะ สวัสดีค่าาาาา 😘

  • ข้อมูลใน DropdownList แรกจนถึง DropdownList สุดท้ายกับค่าที่เหลืออยู่ของเขา ด้วย LINQ

    ในช่วงที่ผ่านมา ได้มีการพัฒนาระบบโดยมีการนำ LinQ มาใช้นิด ๆ หน่อย ๆ (มือใหม่หัดใช้ >< ) ซึ่งมีอยู่ฟังก์ชันนึงที่เกี่ยวกับ การ Bind ค่า DropdownList กรณีที่มี DropdownList หลาย ๆ ตัวและไม่อยากให้ค่าที่เคยเลือกจาก DropdownList ก่อนหน้าไปแสดงใน DropdownList ถัดไปอีก น่าสนใจทดลองใช้แล้วทำงานได้ดี ผู้เขียนจึงนำมาเขียนเพื่อไว้เตือนความจำ จะได้กลับมาอ่าน แนวคิดและวิธีการดังนี้ค่ะ

    ในขั้นตอนแรก สร้าง Data ที่ชื่อว่า MyList เก็บข้อมูล id และชื่อ เพื่อเตรียมเป็น DataSource สำหรับ Bind ให้กับ DropdownList1 ดังนี้

    class MyList
    {
        private string id = string.empty;
        private string name = string.empty;
    
        public MyList(string _id, string _name)
        {
            id = _id;
            name = _name;
        }
    
        public string ID
        {
            get{return id;}
            set {id = value;}
        }
    
        public string Name
        {
            get{return name;}
            set {name = value;}
        }
    }

    ต่อมากำหนดค่าให้กับ MyList เพื่อผูกให้กับ DropdownList1

    List<MyList> mylist = new List<MyList>{
                        new MyList(1,'name1'),
                        new MyList(2,'name2'),
                        new MyList(3,'name3'),
                        new MyList(5,'name5'),
                        new MyList(10,'name10')
                        };

    ผลลัพธ์ของ DropdownList1 ได้ดังนี้

    ID          Name
    1 name1
    2 name2
    3 name3
    5 name5
    10 name10

    ต่อมา กำหนดว่า DropdownList1 เลือกค่าเป็น ID = ‘2’

    string mySelectedValue = '2';

    จากนั้น ที่ Event SelectedIndexChange ของ DropdownList1 ให้ใส่ Code ดังนี้

    var myDataSource = from d in MyList
    where !mySelectedValue.Contains(d.ID)
    select d;

    จากนั้นผูก myDataSource ให้กับ DropdownList2 ค่าล่าสุดใน DropdownList2 จะแสดงดังด้านล่าง โดยที่ ID = ‘2’ จะหายไป เนื่องจากถูกเลือกไปแล้ว ดังนี้

    ID          Name
    1           name1
    3           name3
    5           name5
    10          name10

    กรณีที่มี DropdownList3 ก็ให้ทำเหมือนขั้นตอนก่อนหน้า ตัวอย่างกำหนดค่าการเลือกของ DropdownList1 = ‘2’ และ DropdownList2 = ‘5’ ดังนี้

    string mySelectedValue = '2,5';

    จากนั้น ที่ Event SelectedIndexChange ของ DropdownList2 ให้ใส่ Code แบบเดิม

    var myDataSource = from d in MyList
    where !mySelectedValue.Contains(d.ID)
    select d;

    จากนั้นผูก myDataSource ให้กับ DropdownList3 ค่าล่าสุดใน DropdownList3 จะแสดงดังด้านล่าง โดยที่ ID = ‘2’ และ ‘5’ จะหายไป เนื่องจากถูกเลือกไปแล้ว ดังนี้

    ID           Name
    1            name1
    3            name3
    10           name10

    จะเห็นได้ว่าเราใช้ Query เดียวกันในหลาย ๆ DropdownList ดังนั้นสามารถทำ Query นี้ให้เป็นฟังก์ชันเพื่อเรียกใช้งานได้

    หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยสำหรับผู้อ่านนะคะ \(@^0^@)/