Мультиколонка comboBox, но при выборе значение должно быть Id - PullRequest
0 голосов
/ 08 сентября 2018

Я сделал следующее кодирование, не могу заставить его работать .. У меня есть таблица с Id, Product, FolderPath. у меня есть comboBox2, где мне нужно два столбца данных из приведенной выше таблицы «Id» и «Product», которые будут показаны в comboBox2. Теперь, если я выбираю строку из comboBox2, мне нужно, чтобы textBox1 и textBox2 были заполнены «Product» и «FolderPath» на основе выбора comboBox2. Как и несмотря на то, что comboBox2 показывает «Id» и «Product» внутри, значение должно быть «Id». Ниже приведен мой код; Может ли кто-нибудь помочь мне в этом.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO; 
namespace WindowsFormsApp1
{
    public partial class Main : Form
    {
        string connString;
        SqlConnection conn;
        public Main()
        {
            InitializeComponent();
        }
        private void Main_Load(object sender, EventArgs e)
        {
            connString = @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=ifz001;";
            conn = new SqlConnection(connString);
            conn.Open();
            Load_Products();
        }
        void Load_Products()
        {
            try
            {
                SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FileFolderPath", conn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    comboBox2.Items.Add(dt.Rows[i]["Product"].ToString());
                    comboBox2.ValueMember = dt.Rows[i]["Id"].ToString();
                }
            }
            catch (Exception lp)
            {
                MessageBox.Show(lp.Message);
            }
        }
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            /*try
            {*/

            var pix = "SELECT * FROM FileFolderPath WHERE Id = '" + comboBox2.ValueMember + "'";
            SqlCommand cmd = new SqlCommand(pix, conn);
            cmd.ExecuteNonQuery();
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            foreach (DataRow dr in dt.Rows)
            {

                PID.Text = dr["Product"].ToString();
                PPath.Text = dr["FolderPath"].ToString();

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

1 Ответ

0 голосов
/ 08 сентября 2018

Достигается с использованием следующих изменений кода:

 void Load_Products()
    {
        try
        {
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FileFolderPath", conn);
            DataTable dt = new DataTable();
            da.Fill(dt);

            for(int i = 0; i < dt.Rows.Count; i++)
            {
                string pid = dt.Rows[i]["Id"].ToString() as string;
                string p = dt.Rows[i]["Product"].ToString();

                comboBox2.Items.Add(p);
                comboBox2.DisplayMember = p;
                comboBox2.ValueMember = pid.ToString() as string;
            }

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

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {

            var ppat = "SELECT * FROM FileFolderPath WHERE Id = '" + comboBox2.SelectedIndex + "' ++1";
            SqlCommand cmd = new SqlCommand(ppat, conn);
            cmd.ExecuteNonQuery();
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            foreach(DataRow dr in dt.Rows)
            {

                PID.Text = dr["Id"].ToString();
                PPath.Text = dr["FolderPath"].ToString();

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