读取和修改/更新数据表中的单元格

时间:2013-12-15 21:30:03

标签: asp.net vb.net webforms datatable

方案
我想通过比较种族,宗教,性别,口语等参数来计算和评定医疗工作者对特定患者的适用性。

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中的行数?



编辑/更新:重写整个问题以提供(大量)更多背景信息

1 个答案:

答案 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的来源(没有列),因此仍不清楚您希望如何计算它。但无论如何它可能会给你一个想法。