[K2 SmartForms] – Use SmartObject Property in Custom Control (Part II)

สวัสดีครับ เรามาต่อจากคราวที่แล้วที่เราสามารถเรียกหน้า configure SmartObject ขึ้นมาแสดงได้แล้ว (ถ้ายังไม่ได้เคยอ่าน ดูได้จาก https://k2ranger.wordpress.com/2017/02/20/k2-smartforms-use-smartobject-property-in-custom-control-part-i/  พอแสดงได้แล้ว ในหน้า configure จะมีให้เลือกอยู่ 2 แบบด้วยกัน คือ เลือกเป็น static หรือ SmartObject ในวันนี้เราจะมาพูดในส่วนของ static ก่อน

ในตอนที่แล้ว เราเพิ่ม property ไว้ใน xml หลาย property แต่ยังไม่ได้สร้าง property จริงๆ ใน coding ให้เราไปสร้าง property ใน file .cs ของเราเพิ่ม โดยในการใช้งานส่วนของ static จะใช้แค่ 2 properties ตามด้านล่าง คือ DataSourceType กับ FixedListItems

public string DataSourceType

{

get

{

                return this.GetOption<string>(“dataSourceType”, string.Empty);

}

set

{

                this.SetOption<string>(“dataSourceType”, value, string.Empty);

}

}

public string FixedListItems

{

get

{

                return this.GetOption<string>(“FixedListItems”, string.Empty);

}

set

{

                this.SetOption<string>(“FixedListItems”, value, string.Empty);

}

}

เมื่อเพิ่มแล้วให้เรามาดูเพิ่ม checking ใน method CreateChildControls ในตัวอย่างด้านล่างนี้ ผมจะเช็คว่า ค่าใน DataSourceType เป็น static หรือเปล่า? ถ้าเป็น static ก็จะตรวจสอบ FixedListItems ต่อว่า มีค่าไหม?

ccb4-01

ถ้ามีค่า ก็จะทำการ Deserialize xml (เนื่องจากเวลาเราสร้าง list item เก็บไว้ จะเก็บไว้ใน format ของ xml) ออกมาเป็น list จากนั้นก็วน loop เพื่อ add เข้า dropdownlist เพื่อแสดงค่า และในส่วนสุดท้ายต้องไม่ลืม add dropdownlist เข้าไปใน control ที่จะ render ด้วย (ใน class ผมมีไปประกาศ ddl เป็น dropdownlist แบบ private ไว้ เพื่อเอามาใช้แสดงผลด้วย)

this.ddl = new DropDownList();

if (this.DataSourceType.Equals(“static”, StringComparison.InvariantCultureIgnoreCase))

{

if (!string.IsNullOrEmpty(this.FixedListItems))

{

using (StringReader reader = new StringReader(this.FixedListItems))

{

bool flag = true;

List<StaticItem> list = null;

                        if (this.FixedListItems.StartsWith(“[“))

{

JavaScriptSerializer serializer = new JavaScriptSerializer();

try

{

list = serializer.Deserialize<List<StaticItem>>(this.FixedListItems);

}

catch (ArgumentException)

{

flag = false;

}

if (flag)

{

foreach (StaticItem item in list)

{

ddl.Items.Add(new ListItem(HttpUtility.HtmlEncode(item.Display), HttpUtility.HtmlEncode(item.Value)));

}

this.Controls.Add(ddl);

}

}

else

                        {

flag = false;

                        }

}

}

}

ในกรณีที่ใส่ code ไปแล้วติด reference บางตัวที่หาไม่เจอ ให้ลอง add dll SourceCode.Forms.Utilities เพิ่มเข้ามาใน project แล้วก็ add using ตามด้านล่างเข้าไปใน coding ของ control เพิ่ม

using SourceCode.Forms.Controls.Web.SDK;

using SourceCode.Forms.Controls.Web.SDK.Attributes;

using System.IO;

using System.Web.Script.Serialization;

using SourceCode.Forms.Utilities;

using System.Xml;

เมื่อทำการ deploy เรียบร้อยก็มาทดสอบกัน โดยใส่ข้อมูลเป็น static list

ccb4-02

ccb4-03

จะเห็นว่า ข้อมูลถูกแสดงออกมาอย่างที่อยากได้ใน dropdownlist แต่ถ้าอยากเอาข้อมูลออกมาใช้งานต่อ ก็ต้องไป implement javascript เพื่อ get ค่าจาก control ออกมาอีกรอบนะครับ สำหรับคราวนี้ก็ขอจบการดึง data จาก static list มาแสดงใน control แต่เพียงเท่านี้ แล้วค่อยมาต่อกันรอบหน้าสำหรับการดึงข้อมูลจาก SmartObject มาแสดงครับ 🙂

 

Advertisements

One thought on “[K2 SmartForms] – Use SmartObject Property in Custom Control (Part II)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s