【问题标题】:Select columns based on text displayed on multiple TextBoxes根据多个文本框上显示的文本选择列
【发布时间】:2020-06-03 21:57:14
【问题描述】:

我正在尝试创建用户报告生成器功能。

我有一个CheckBoxes 列表,当IsChecked 将显示来自数据库中表的SQL Server 列名。然后我尝试在我的SQL Statement 中使用这些名称来生成查询结果。

我面临的问题是他用户无法选择各种列名,因为 SQL 语句中需要 , 来分隔列名。如果未选中 CheckBox,我不希望显示该列。

这是我的代码,它将执行查询结果并填充DataGrid,如果textboxes 都填充了文本,我将在其中收到异常错误。如果只有一个被填满,它就可以工作。

private void butn_ExecuteQuery_Click(object sender, RoutedEventArgs e)
{
    try
    {
        string connectionString = ("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");
        SqlConnection connection = new SqlConnection(connectionString);

        SqlCommand cmd = new SqlCommand("SELECT " + txtAccount.Text + txtAssignedTo.Text + " FROM [hb_Disputes] CROSS JOIN hb_FinAdj INNER JOIN Users ON hb_Disputes.ASSGNTO = Users.KY_USER_ID WHERE (hb_Disputes.OPENED >=@OPENED AND hb_Disputes.OPENED < @CLOSED) AND (Users.TX_EMPLOYEE =@query)", connection);
        //EMP Name
        cmd.Parameters.AddWithValue("@query", txt_Query.Text);

        cmd.Parameters.Add("@OPENED", SqlDbType.DateTime).Value = dtepicker_Open.Text;
        cmd.Parameters.Add("@CLOSED", SqlDbType.DateTime).Value = dtepicker_DateResolved.Text;

        connection.Open();
        DataTable dt = new DataTable();

        dt.Load(cmd.ExecuteReader());
        connection.Close();

        dt_ReportList.DataContext = dt;
        dt_ReportList.SelectedIndex = 0;

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

这是CheckBoxescheckedunchecked 时要处理的代码

private void chckAccount_Checked(object sender, RoutedEventArgs e)
{
    txtAccount.Text = "[hb_Disputes].[ACCOUNT]";
}

private void chckAccount_Unchecked(object sender, RoutedEventArgs e)
{
    txtAccount.Text = " ";
}

private void chckAssignedTo_Checked(object sender, RoutedEventArgs e)
{
    txtAssignedTo.Text = "[hb_Disputes].[ASSGNTO]";
}

private void chckAssignedTo_Unchecked(object sender, RoutedEventArgs e)
{
    txtAssignedTo.Text = " ";
}

【问题讨论】:

  • 你是在问我们如何用逗号做字符串连接逻辑?

标签: sql-server wpf select checkbox


【解决方案1】:

您可以检查两个文本框是否有文本,如果有则添加逗号:

private void butn_ExecuteQuery_Click(object sender, RoutedEventArgs e)
{
    try
    {
        string connectionString = ("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");
        SqlConnection connection = new SqlConnection(connectionString);

        string account = txtAccount.Text;
        string assignedTo = txtAssignedTo.Text;
        if (account.Length > 1 && assignedTo.Length > 1)
            account += ",";
        SqlCommand cmd = new SqlCommand("SELECT " + account + assignedTo + " FROM [hb_Disputes] CROSS JOIN hb_FinAdj INNER JOIN Users ON hb_Disputes.ASSGNTO = Users.KY_USER_ID WHERE (hb_Disputes.OPENED >=@OPENED AND hb_Disputes.OPENED < @CLOSED) AND (Users.TX_EMPLOYEE =@query)", connection);

        ...

    }
    catch (Exception ex)
    {
        ...
    }
}

【讨论】:

  • 这正是我一直在寻找的,而且效果很好。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多