在 c# 中执行 select 语句后获取检查以填充复选框

Getting checks to populate in checkboxes after select statement has been executed in c#

我目前正在处理一个包含 21 个文本框输入和 25 个复选框的数据库。我希望能够执行 select 语句,用正确的文本填充文本框,并填充数据库中值为 1 的任何复选框。我能够很好地搜索并将结果输入文本框,但是我似乎无法在预期时弹出支票。在数据库端,我将复选框的数据类型设置为 int ,其中 1 = 已选中,0 = 未选中。这是我的 select 语句的代码片段。

SqlConnection con = new SqlConnection(@"Data Source=CD-FS02;Initial Catalog=engineering;Integrated Security=True");

SqlDataAdapter da;

DataTable ss = new DataTable();


private void btnSearch_Click(object sender, EventArgs e)
{
    con.Open();
    string str = "select * from engineering where (JobNumber like '%' + @search + '%' "
        + "AND DateOrdered like '%' + @search1 + '%' "
        + "AND Title like '%' + @search2 + '%' "
        + "AND PhysicalAddressComplete like '%' + @search3 + '%' "
        + "AND County like '%' + @search4 + '%' "
        + "AND Client like '%' + @search5 + '%' "
        + "AND Contact like '%' + @search6 + '%' "
        + "AND ContactTitle like '%' + @search7 + '%' "
        + "AND MailingAddressComplete like '%' + @search8 + '%' "
        + "AND BusinessPhone like '%' + @search9 + '%' "
        + "AND CellPhone like '%' + @search10 + '%' "
        + "AND Email like '%' + @search11 + '%' "
        + "AND OpenStatus like '%' + @search12 + '%' "
        + "AND CloseStatus like '%' + @search13 + '%' "
        + "AND Cabinet like '%' + @search14 + '%' "
        + "AND Roll like '%' + @search15 + '%' "
        + "AND Drawer like '%' + @search16 + '%' "
        + "AND ConstructionDrawings like '%' + @search17 + '%' "
        + "AND Fee like '%' + @search18 + '%' "
        + "AND ConstructionCost like '%' + @search19 + '%' "
        + "AND ProjectDescription like '%' + @search20 + '%' )";

    SqlCommand xp = new SqlCommand(str, con);

    xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = txtProjectNumber.Text;
    xp.Parameters.Add("@search1", SqlDbType.NVarChar).Value = txtDateOrdered.Text;
    xp.Parameters.Add("@search2", SqlDbType.NVarChar).Value = txtProjectName.Text;
    xp.Parameters.Add("@search3", SqlDbType.NVarChar).Value = txtProjectAddress.Text;
    xp.Parameters.Add("@search4", SqlDbType.NVarChar).Value = txtCounty.Text;
    xp.Parameters.Add("@search5", SqlDbType.NVarChar).Value = txtClient.Text;
    xp.Parameters.Add("@search6", SqlDbType.NVarChar).Value = txtClientContact.Text;
    xp.Parameters.Add("@search7", SqlDbType.NVarChar).Value = txtContactTitle.Text;
    xp.Parameters.Add("@search8", SqlDbType.NVarChar).Value = txtBillingAddress.Text;
    xp.Parameters.Add("@search9", SqlDbType.NVarChar).Value = txtBusinessPhone.Text;
    xp.Parameters.Add("@search10", SqlDbType.NVarChar).Value = txtCellPhone.Text;
    xp.Parameters.Add("@search11", SqlDbType.NVarChar).Value = txtEmail.Text;
    xp.Parameters.Add("@search12", SqlDbType.NVarChar).Value = txtOpenStatus.Text;
    xp.Parameters.Add("@search13", SqlDbType.NVarChar).Value = txtCloseStatus.Text;
    xp.Parameters.Add("@search14", SqlDbType.NVarChar).Value = txtCabinet.Text;
    xp.Parameters.Add("@search15", SqlDbType.NVarChar).Value = txtRoll.Text;
    xp.Parameters.Add("@search16", SqlDbType.NVarChar).Value = txtDrawer.Text;
    xp.Parameters.Add("@search17", SqlDbType.NVarChar).Value = txtDrawings.Text;
    xp.Parameters.Add("@search18", SqlDbType.NVarChar).Value = txtFee.Text;
    xp.Parameters.Add("@search19", SqlDbType.NVarChar).Value = txtCost.Text;
    xp.Parameters.Add("@search20", SqlDbType.NVarChar).Value = txtProjectDescription.Text;

    try
    {
        xp.ExecuteNonQuery();
        da = new SqlDataAdapter();
        da.SelectCommand = xp;
        da.Fill(ss);
        Showdata(pos);
        if ((int)ss.AsEnumerable().First()["engineering"] == 1)
        {
            this.chkDesign.Checked = false;
        }
        else
        {
            this.chkDesign.Checked = true;
        }
    }
    catch
    {
        MessageBox.Show("No Record Found");
    }

    con.Close();
}

任何有关这方面的帮助或知识将不胜感激。

你的代码,在 try 中,应该是这样的:

    // xp.ExecuteNonQuery();  //this is unnecessary
    // the sql query will get executed by the da.Fill command.
    da = new SqlDataAdapter();
    da.SelectCommand = xp;
    da.Fill(ss);
    Showdata(pos);
    if (ss.Rows.Count > 0) {
      this.chkDesign.Checked = ((int)ss.AsEnumerable().First()["Design"] == 1);
    }

在尝试使用第一行之前,您实际上必须检查查询是否返回了任何行。我不确定我的语法是否正确,但你明白了。