【发布时间】:2017-02-16 02:46:28
【问题描述】:
请帮忙。这是我为我公司的客户服务团队工作了大约 6 周的 UI,他们渴望使用它。
如标题所示,我正在尝试选择与包含复选框的行关联的“ID”值。如果该复选框被“选中”,我希望运行一个选择语句并从该行中获取“ID”值。
protected void UpdateSelectedRecords()
{
string strPerSignStart = "%";
string strPerSignEnd = "%";
string strDbSearch = strPerSignStart + ddlDatabasesUpdateTCID.Text + strPerSignEnd;
object NewTCID = txtTargetCID.Text;
DateTime curtstmp = DateTime.Now;
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
chkBox = (row.Cells[0].Controls[0] as CheckBox);
if (chkBox != null && Convert.ToBoolean(chkBox.Checked) == true)
{
OdbcConnection Postgreconnect2 = new OdbcConnection("Driver= {PostgreSQL Unicode};Server=localhost;Port=5433;Database=postgres;Uid=xxx;Pwd=xxx");
Postgreconnect2.Open();
OdbcCommand cmd = new OdbcCommand("SELECT id FROM conceptidmapping WHERE database ILIKE " + "?" + " AND " + (chkBox.Checked == true) + " ORDER BY id ASC", Postgreconnect2);
cmd.Parameters.AddWithValue("@database", strDbSearch);
cmd.Parameters["@database"].Value = Convert.ToString(strDbSearch);
cmd.Connection = Postgreconnect2;
string idVal = (string)cmd.ExecuteScalar();
OdbcCommand cmd1 = new OdbcCommand("UPDATE conceptidmapping SET selected = true WHERE database ILIKE " + "?" + " AND id = " + idVal, Postgreconnect2);
cmd1.Parameters.AddWithValue("@database", strDbSearch);
cmd1.Parameters["@database"].Value = Convert.ToString(strDbSearch);
cmd1.Connection = Postgreconnect2;
cmd1.ExecuteNonQuery();
}
}
}
}
【问题讨论】:
-
我很抱歉最初没有提供太多这方面的信息。发生的事情是当程序进入“For”循环时,它通过 Gridview(从上到下)逐行导航。当它看到复选框被选中时,它进入第二个 IF 语句(使用 ODBC 命令)。第一个 ODBC 命令尝试定位该行的“ID”值。一旦获得了“ID”值,它将在第二个 ODBC 命令中使用该值将“选定”列从“假”更新为“真”。
-
发生的事情是它确实从正确的数据库中获取了一个“ID”值,但它从来不是我选中复选框的那个。有没有人看到我在这种方法中有任何简单的缺陷?我也在“代码隐藏”文件(C#)中完成这一切,因为该过程的第一步是从下拉列表中选择一个“数据库”值。我可能错了,但认为在标记中填充的命令中使用这种方法会很困难。非常欢迎任何建议!