จะทำแบบประเมิน โดยดึงคำถามมาจาก table แล้วให้มีปุ่ม radio button เพื่อให้คะแนน 1-5
ตอนนี้ที่ทำไว้ ดึงมาขึ้น gridview แล้วให้ radio อยู่ใน grid
ปัญหา คือ ไม่รู้ว่าคำสั่งใส่ radio แบบนี้ถูกไหม ใส่ค่าใน value ถูกไหม
แล้วเวลาทำการประเมิน เมื่อกดปุ่ม radio ตัวใดให้เซฟคะแนนเลย หรือ กดยืนยันก่อนก็ได้
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim cmd As New SqlCommand
Dim dsChk As New DataSet
Dim daChk As New SqlDataAdapter
Dim sqlselect As String = ""
conn.Open()
sqlselect = "Select core from Core_Competency"
cmd = New SqlCommand()
dsChk.Clear()
daChk = New SqlDataAdapter(sqlselect, conn)
daChk.Fill(dsChk, "Core_Competency")
With cmd
.CommandType = CommandType.Text
.CommandText = sqlselect
.Connection = conn
dr = .ExecuteReader()
End With
dr.Read()
If dr.HasRows Then
Label1.Text = CStr(dr(0))
End If
dr.Close()
End Sub
ขอโทษนะถ้ารบกวนมากไป เราทำไม่เป็นจริงๆ เพิ่งเรียบจบมาทำงาน ไม่มีคนสอนงานด้วย ทำคนเดียว เลยพึ่งแต่ internet
Date :
2013-05-22 08:18:56
By :
กำลังเครียด
No. 11
Guest
ให้เป็นตัวอย่างเอาไปศึกษานะ
ครั้งหน้าไม่ให้โค้ดแล้วนะ
PollVb.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class PollVb
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
' ตรวจสอบว่าถ้าไม่ได้ postback ให้ทำการ bind ข้อมูล
If Not Page.IsPostBack Then
Dim dt As DataTable = GetData()
Repeater1.DataSource = dt
Repeater1.DataBind()
End If
End Sub
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
' วนลูป item ใน repeater itemcollection
For Each item As RepeaterItem In Repeater1.Items
' ตรวจสอบ itemtype ให้ทำเฉพาะที่เป็น item กับ alternating item
If item.ItemType = ListItemType.Item Or item.ItemType = ListItemType.AlternatingItem Then
' ค้นหา label ชื่อ "LabelSubject" ใน repeater itemtemplate และ add label ลงใน placeholder1
Dim lableSubject As Label = DirectCast(item.FindControl("LabelSubject"), Label)
PlaceHolder1.Controls.Add(New LiteralControl(lableSubject.Text))
' query radiobutton ใน repeater itemtemplate ด้วย linq
Dim rdb = From r In item.Controls.Cast(Of Control)()
Where r.GetType() = GetType(RadioButton)
Select r
' วนลูป radiobutton ที่ qeury มา
For Each r As RadioButton In rdb.ToList()
Dim radioButton As RadioButton = DirectCast(r, RadioButton)
' ตรวสอบว่า radiobutton มีการ checked
If (radioButton.Checked) Then
' แสดงผลคะแนนลงใน placeholder1
PlaceHolder1.Controls.Add(New LiteralControl(String.Format(" = {0} คะแนน", (Convert.ToDouble(radioButton.ID.Substring(radioButton.ID.Length - 2, 2)) / 10).ToString("0.0"))))
End If
Next
' แสดงผลขึ้นบรรทัดใหม่ใน placeholder1
PlaceHolder1.Controls.Add(New LiteralControl("<br />"))
End If
Next
End Sub
Protected Sub Repeater1_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
' ตรวจสอบ itemtype ให้ทำเฉพาะที่เป็น item กับ alternating item
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
' แปลง type ของ dataitem เป็น datarowview
Dim drv As DataRowView = DirectCast(e.Item.DataItem, DataRowView)
' ค้นหา label ชื่อ "LabelSubject" ใน repeater itemtemplate
Dim labelSubject As Label = DirectCast(e.Item.FindControl("LabelSubject"), Label)
labelSubject.Text = DirectCast(drv("Subject"), String)
' query radiobutton ใน repeater itemtemplate ด้วย linq
Dim rdb = From r In e.Item.Controls.Cast(Of Control)()
Where r.GetType() = GetType(RadioButton)
Select r
' วนลูป radiobutton ที่ qeury มาและกำหนด groupname
For Each r As RadioButton In rdb.ToList()
Dim radioButton As RadioButton = DirectCast(r, RadioButton)
radioButton.GroupName = DirectCast(drv("Code"), String)
Next
End If
End Sub
Protected Function GetData() As DataTable
' ถ้าใช้งานจริงให้เปลี่ยนจากสร้าง datatable เป็น query จาก database
Dim data As String()() = New String()() { _
New String() {"C0001", "การร่วมแรงร่วมใจและการทำงานเป็นทีม (Coopercation & Teamwork)"}, _
New String() {"C0002", "ความซื่อสัตย์และจรยาบรรณ (Integrity & Ethics)"}, _
New String() {"C0003", "การให้ความสำคัญกับลูกค้า (Customer focus)"}, _
New String() {"C0004", "การพัฒนาเพื่อความเป็นเลิศ (Dedication to Quality Excellence)"}, _
New String() {"C0005", "ความยึดมั่นในผลสำเร็จของงาน (Result Orientation)"}, _
New String() {"C0006", "การตระหนักถึงต้นทุนทางธุรกิจ (Cost Sensitivity)"}, _
New String() {"C0007", "ความกระตือรือร้นในการเรียนรู้ (Motivation to Learn)"}}
Dim dt As New DataTable()
dt.Columns.Add(New DataColumn("Code", GetType(String)))
dt.Columns.Add(New DataColumn("Subject", GetType(String)))
For Each d As String() In data
Dim dr As DataRow = dt.NewRow()
dr("Code") = d(0)
dr("Subject") = d(1)
dt.Rows.Add(dr)
Next
Return dt
End Function
Protected Function GetDbData() As DataTable
' สร้าง connection
Dim connectionString As String = "...................."
Dim connection As New SqlConnection(connectionString)
' สร้าง command
Dim commandString As String = "SELECT [id_core] AS [Code], [core] AS [Subject] FROM [Core_Competency]"
Dim command As New SqlCommand(commandString, connection)
' query ข้อมูลมาใส่ datatable
Dim dt As New DataTable()
Dim dataAdapter As New SqlDataAdapter(command)
dataAdapter.Fill(dt)
Return dt
End Function
End Class
Date :
2013-05-22 10:45:12
By :
ห้ามตอบเกินวันละ 2 กระทู้
No. 12
Guest
***** (ห้าดาว)
วิธีหาตัวอย่างมันตอบโจทย์ ASP.NET (Web) ได้ครบถ้วนสมบูรณ์แบบ อทิเช่น
--- การวนลูปบน HTML Table (โดยใช้ Repeater แทน GridView) *****
--- การเลือกใช้ Controls เหมาะสมกับลักษณะของงาน *****
--- LINQ, Lamda ค่อนข้างจะลงตัว
--- String Array และเทคนิคการเขียนโปรแกรม *****
------- Dim data As String()() == Dim data As New List(Of String) From {...}
------- Dim data As String()()()()()() *****
--- การแปลงค่า (Convert) และ เทคนิคการหาค่าจากชื่อของตัวแปร (Valueable & Variable) *****
--- etc
Protected Function GetData() As DataTable
Dim dt As New DataTable()
dt.Columns.Add(New DataColumn("Code", GetType(String)))
dt.Columns.Add(New DataColumn("Subject", GetType(String)))
'ไม่ต้องแปลงเป็น Enumerable
data.ToList().ForEach(Sub(d)
Dim dr As DataRow = dt.NewRow()
dr.Item("Code") = d(0)
dr.Item("Subject") = d(1)
End Sub)
'//data.ToList().ForEach(d =>
'// {
'// DataRow dr = dt.NewRow();
'// dr["Code"] = d[0];
'// dr["Subject"] = d[1];
'// dt.Rows.Add(dr);
'// });
Return dt
End Sub
#NO11 บรรทัดที่ 53
Code (VB.NET)
Protected Sub Repeater1_ItemDataBound(sender As Object,...
For Each item In Me.Repeater1.Items
If ((item.ItemType = ListItemType.Item) OrElse (item.ItemType = ListItemType.AlternatingItem)) Then
Dim label As Label = DirectCast(item.FindControl("LabelSubject"), Label)
Me.PlaceHolder1.Controls.Add(New LiteralControl(label.Text))
Enumerable.ToList(Of Control)((From c In Enumerable.Cast(Of Control)(item.Controls)
Where (c.GetType Is GetType(RadioButton))
Select c)).ForEach(Sub(c As Control)
Dim button As RadioButton = DirectCast(c, RadioButton)
If button.Checked Then
Dim tmpVar As Double = (Convert.ToDouble(button.ID.Substring((button.ID.Length - 2), 2)) / 10)
Me.PlaceHolder1.Controls.Add(New LiteralControl(String.Format(" = {0} คะแนน", tmpVar.ToString("0.0"))))
End If
End Sub)
Me.PlaceHolder1.Controls.Add(New LiteralControl("<br />"))
End If
Next
End Sub
Where (r.GetType() = GetType(RadioButton))
' ควรจะใช้ is มากกว่า
Where (r.GetType() Is GetType(RadioButton))
แต่ของ c# ก็ใช้ == ตามเดิม
2 ทำให้รู้ว่า vb ก็ทำแบบนี้ได้
Code (VB.NET)
Enumerable.ToList(Of RadioButton)(From r In e.Item.Controls.Cast(Of Control)()
Where (r.GetType() Is GetType(RadioButton))
Select DirectCast(r, RadioButton)).ForEach(Sub(r)
r.GroupName = DirectCast(drv.Item("Code"), String)
End Sub)
'LINQ
Private Function GetRBCheck() As String
Return (From c In New RadioButton() {RadioButton1, RadioButton2, RadioButton3, RadioButton4} Where c.Checked Select c.Text).ToArray()(0)
End Function
#Region "Repeater Manager"
'Thank : #095316 คุณ กำลังเครียด/คุณ ห้ามตอบเกินวันละ 2 กระทู้ (www.thaicreate.com)
Private Sub Repeater1_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
If ((e.Item.ItemType = ListItemType.Item) OrElse (e.Item.ItemType = ListItemType.AlternatingItem)) Then
Dim drv As DataRowView = DirectCast(e.Item.DataItem, DataRowView)
Dim lblMenuName As Label = DirectCast(e.Item.FindControl("lblMenuName"), Label)
lblMenuName.Text = drv.Item("xTitleTH").ToString()
'***** Fixed Bug's Item.DataItem are all null when postback.
lblMenuName.Attributes.Add("MenuID", drv.Item("MenuID"))
'*****
Enumerable.ToList(Of Control)((From c In Enumerable.Cast(Of Control)(e.Item.Controls)
Where (c.GetType Is GetType(CheckBox))
Select c)).ForEach(Sub(c As Control)
Dim cb As CheckBox = DirectCast(c, CheckBox)
Try
cb.Checked = If(drv.Item("ACL").ToString().Substring(Convert.ToSByte(cb.ID.Substring(1)), 1) = "1", True, False)
Catch ex As Exception
cb.Checked = False
End Try
End Sub)
End If
End Sub
Protected Sub SaveData(sender As Object, e As EventArgs)
If cboUsers.SelectedValue = "-1" Then
'alert("Please select...");
Return
End If
'Dim strSQL() As String = {} '--> Array.Resize(strSQL, strSQL.Length + 1)
Dim strACL As String = String.Empty
Dim s As New StringBuilder()
s.Append("MERGE INTO msrFormPerm AS T ") 'Target
s.Append("USING ( VALUES ")
For Each item In Me.Repeater1.Items
strACL = String.Empty
If ((item.ItemType = ListItemType.Item) OrElse (item.ItemType = ListItemType.AlternatingItem)) Then
'Dim drv As DataRowView = DirectCast(item.DataItem, DataRowView) 'item.DataItem are all null
Dim lblMenuName As Label = DirectCast(item.FindControl("lblMenuName"), Label)
Enumerable.ToList(Of Control)((From c In Enumerable.Cast(Of Control)(item.Controls)
Where (c.GetType Is GetType(CheckBox))
Select c)).ForEach(Sub(c As Control)
strACL &= If(DirectCast(c, CheckBox).Checked, "1", "0")
End Sub)
s.Append("(999, ") 'Maybe Fixed Branch 999
s.Append(lblMenuName.Attributes.Item("MenuID") & ", ")
s.Append("0, ") '0 = Users ID, Otherwise is Group ID
s.Append(cboUsers.SelectedValue & ", ")
s.Append("'" & strACL & "'), ") 'Rem*****
End If
Next
s.Remove(s.Length - 2, 2) 'Remove End of Rem***** [,Space(1)]
s.Append(") AS S (BranchID, PageID, RoleID, UserID, ACL) ") 'Source
s.Append("ON T.BranchID = S.BranchID AND T.PageID = S.PageID AND T.RoleID = S.RoleID AND T.UserID = S.UserID ")
s.Append("WHEN MATCHED AND S.ACL = N'0000000000' THEN DELETE ")
s.Append("WHEN MATCHED THEN ")
s.Append("UPDATE SET ACL = S.ACL ")
s.Append("WHEN NOT MATCHED BY TARGET AND S.ACL <> N'0000000000' THEN ")
s.Append("INSERT (BranchID, PageID, RoleID, UserID, ACL) VALUES (S.BranchID, S.PageID, S.RoleID, S.UserID, S.ACL);")
'Execute(Query(s.ToString()))
End Sub
#End Region