方案
我想通过比较种族,宗教,性别,口语等参数来计算和评定医疗工作者对特定患者的适用性。
HealthcareWorker table
----------------------
ID (int)
name (varchar)
race (varchar)
religion (varchar)
gender (varchar)
german (bit)
french (bit)
english (bit)
Patient table
-------------
ID (int)
name (varchar)
race (varchar)
religion (varchar)
gender (varchar)
german (bit)
french (bit)
english (bit)
网页布局
在page1.aspx
上会有一个gridview
表格,显示所有Patients
的详细信息。
然后,用户将选择Patient
并转到page2.aspx
在page2.aspx
上会有一个表格,其中显示了每个Healthcare Worker
的详细信息以及他对patient
形式的所选score
的适用性。表格中还会有checkboxes
,以便为选定的Healthcare Worker
分配多个Patient
。
page2.aspx
| ID | name | religion | gender | german | french | english | score | |
|----+-------+----------+---------+----------+---------+----------+--------+----------|
| 4 | mary | | f | 1 | 0 | 1 | 132 | checkbox |
| 2 | john | | m | 0 | 1 | 1 | 125 | checkbox |
| 3 | tim | | m | 1 | 0 | 1 | 98 | checkbox |
| 1 | jane | | f | 1 | 1 | 0 | 55 | checkbox |
得分的计算将是这样的:
if patient.race = healthcareworker.race then healthcarework.score +10
if patient.religion = healthcareworker.religion then healthcarework.score +10
if at least one of patient's language match with healthcareworker's language then healthcarework.score +10
代码:
Dim strCon As String = ConfigurationManager.ConnectionStrings("ConnectionString1").ConnectionString
Dim con As New SqlConnection(strCon)
Dim query As String = "select *, CAST ( 0 as int ) score from HealthcareWorker;"
Dim cmd As SqlCommand = New SqlCommand(query, con)
con.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Dim dt As DataTable = New DataTable()
dt.Load(dr)
'code to read cell
'code to compare and compute
'code to update the score in each row
GridView1.DataSource = dt
GridView1.DataBind()
con.Close()
如何读取和修改数据表中的单元格?
我想读取并比较每行中某些单元格的数据,然后更新score
值。
我需要为每一行更新score
,所以我需要一个循环,但我不知道将要加载到datatable
之前的行数。
如何获取datatable
中的行数?
编辑/更新:重写整个问题以提供(大量)更多背景信息
答案 0 :(得分:0)
最后一个问题很容易回答:
我需要更新每一行的分数,所以我需要一个循环 但我不知道将加载到的行数 数据表之前的手。 如何获取行数 数据表强>
您只需使用Rows.Count
属性:
Dim rowCount As Int32 = tblPatient.Rows.Count ' tblPatient => DataTable '
如果要循环所有行,可以使用foreach
:
For Each row As DataRow In tblPatient.Rows
' ... '
Next
或for
- 循环:
For i As Int32 = 0 To tblPatient.Rows.Count - 1
Dim row As DataRow = tblPatient.Rows(i)
' ... '
Next
要更新行,您可以使用也支持可空类型的SetField
扩展方法:
For Each row As DataRow In tblPatient.Rows
Dim id As Int32 = row.Field(Of Int32)("ID")
Dim race As String = row.Field(Of String)("Race")
row.SetField("Score", CalculateScore(row))
Next
很抱歉,我无法为您提供正确的计算方法,但由于您尚未提供Score
的来源(没有列),因此仍不清楚您希望如何计算它。但无论如何它可能会给你一个想法。