c# заполнение нескольких полей со списком для обновления и удаления вопроса - PullRequest
0 голосов
/ 14 июля 2020

это поле со списком получает идентификатор задания из базы данных и назначает его jobidcombobox.

    private void filljobid()
    {
        SqlConnection con = new SqlConnection(strConn);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT job_id FROM job";
        DataSet ds = new DataSet();
        SqlDataAdapter dAdapter = new SqlDataAdapter();
        dAdapter.SelectCommand = cmd;
        con.Open();
        dAdapter.Fill(ds);
        con.Close();
        jobidcombobox.DisplayMember = "job_id";
        jobidcombobox.ValueMember = "job_id";
        jobidcombobox.DataSource = ds.Tables[0];
    }

И затем этот код изменения индекса принимает значение jobidcombobox и использует его для запроса, чтобы получить остальную часть столбцы, которые к нему относятся.

    private void jobidcombobox_SelectedIndexChanged(object sender, EventArgs e)
    {
        string JobID = jobidcombobox.Text;


        SqlConnection con = new SqlConnection(strConn);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT * from job where job_id = '" + JobID + "' ";
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        da.Fill(ds);

        if (ds.Tables[0].Rows.Count > 0)
        {
            customeridcombobox.Text = ds.Tables[0].Rows[0]["customer_id"].ToString();
            depotidcombobox.Text = ds.Tables[0].Rows[0]["depot_id"].ToString();
            startlocationtextbox.Text = ds.Tables[0].Rows[0]["start_location"].ToString();
            endlocationtextbox.Text = ds.Tables[0].Rows[0]["end_location"].ToString();
            jobtypecombobox.Text = ds.Tables[0].Rows[0]["job_type"].ToString();
        }

        else
        {
            MessageBox.Show("Invalid job number");
        }
    }

Как видно выше, Customerid заполнен, но только одним значением, которое относится к jobid. Я хотел бы добавить сюда другие значения идентификаторов клиентов из базы данных. Я пытался использовать ту же функцию, что и jobid, чтобы получить идентификатор клиента, но я не могу связать его с идентификатором вакансии.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 14 июля 2020

Попробуйте это ...

Заполните поля идентификатора задания и идентификатора клиента.

private void FillJobIdAndCustomerId()
{
    SqlConnection con = new SqlConnection(strConn);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT job_id, customer_id FROM job";
    DataSet ds = new DataSet();
    SqlDataAdapter dAdapter = new SqlDataAdapter();
    dAdapter.SelectCommand = cmd;
    con.Open();
    dAdapter.Fill(ds);
    con.Close();
    var dataRows = ds.Tables[0].AsEnumerable();
    jobidcombobox.DisplayMember = "job_id";
    jobidcombobox.ValueMember = "job_id";
    jobidcombobox.DataSource = dataRows.Select(x=>x.job_id);
    customeridcombobox.DisplayMember = "customer_id";
    customeridcombobox.ValueMember = "customer_id";
    customeridcombobox.DataSource = dataRows.Select(x=>x.customer_id);
}

И затем, когда выбран идентификатор задания ...

private void jobidcombobox_SelectedIndexChanged(object sender, EventArgs e)
{
    string JobID = jobidcombobox.Text;


    SqlConnection con = new SqlConnection(strConn);
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT * from job where job_id = @jobId";
    commandObject.Parameters.AddWithValue("@jobId", JobID);
    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = cmd;
    da.Fill(ds);

    if (ds.Tables[0].Rows.Count > 0)
    {
        customeridcombobox.SelectedIndex = customeridcombobox.FindString(ds.Tables[0].Rows[0]["customer_id"].ToString());
        depotidcombobox.Text = ds.Tables[0].Rows[0]["depot_id"].ToString();
        startlocationtextbox.Text = ds.Tables[0].Rows[0]["start_location"].ToString();
        endlocationtextbox.Text = ds.Tables[0].Rows[0]["end_location"].ToString();
        jobtypecombobox.Text = ds.Tables[0].Rows[0]["job_type"].ToString();
    }

    else
    {
        MessageBox.Show("Invalid job number");
    }
}

Может следовать аналогичному шаблону для других полей со списком, которые у вас есть (отдел, тип задания из вашего примера), если вы хотите.

Примечание. заметил, что я немного изменил построение запроса, используя SqlParameters. То, как это было написано в вашем примере кода, - это classi c случай SQL Injection .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...