【问题标题】:Not appear the selected items in textBox文本框中不出现所选项目
【发布时间】:2021-03-06 15:56:04
【问题描述】:

我想在我的文本框中检索对象信息。就我而言,我想从数据库中检索电影详细信息,当我单击电影标题时,我想显示 SSMS 中的所有信息并放入文本框。我设法获得了电影标题并将其放入列表框中,但是当我单击标题时,文本框中没有出现任何内容。 这是我的代码:

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;

namespace DataBase
{
public partial class Form1 : Form
{
    DataTable dt = new DataTable();
    public void LoadData()
    {
        new SqlDataAdapter("SELECT * FROM movie", @"Data Source=DESKTOP-UUR5DET\\SQLEXPRESS;Initial 
        Catalog=online_tv;Integrated Security=SSPI;").Fill(dt);
    }

    public class MyMovie
    {
        public int id;
        public string title;
        public override string ToString()
        {
            return title;
        }
    }

    public void ShowMovies()
    {
        int i;
        for (i = 0; i < dt.Rows.Count; i++)
        {
            MyMovie movie = new MyMovie();
            
            movie.title = Convert.ToString(dt.Rows[i]["movie_title"]);

            listBox1.Items.Add(movieBindingSource);
        }
    }

    public Form1()
    {
        InitializeComponent();
    }

    public void Form1_Load(object sender, EventArgs e)
    {
        LoadData();
        ShowMovies();
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int index = listBox1.SelectedIndex;

        string info = "";
        int i;
        if (dt.Rows.Count > 0 && index >= 0)
        {
            for (i = 0; i < dt.Columns.Count; i++)
            {
                info += dt.Columns[i].ColumnName + ": " +
                    dt.Rows[index][dt.Columns[i].ColumnName] + "\r\n";
            }
        }

        textBox1.Text = info;
    }

    private void Form1_Load_1(object sender, EventArgs e)
    {
       
        this.movieTableAdapter.Fill(this.online_tvDataSet1.movie);

    }
}
}

电影表如下所示:

【问题讨论】:

    标签: c# mysql visual-studio ssms


    【解决方案1】:

    下面一行是问题:

    listBox1.Items.Add(movieBindingSource);
    

    您正在将movieBindingSource 添加到listBox1 项目,但您需要做的是添加新创建的movie 对象。像这样:

    public void ShowMovies()
    {
        int i;
        for (i = 0; i < dt.Rows.Count; i++)
        {
            MyMovie movie = new MyMovie();
            
            movie.title = Convert.ToString(dt.Rows[i]["movie_title"]);
    
            listBox1.Items.Add(movie);
        }
    }
    

    在 VS2019 中测试,它用选定的行填充 textBox1 数据:)

    【讨论】:

      【解决方案2】:

      可以使用LINQ查询数据表,不需要定义MyMovie类。

      首先,要在列表框中显示电影标题,修改ShowMovies如下。

      public void ShowMovies()
      {
          int i;
          for (i = 0; i < dt.Rows.Count; i++)
          {
              listBox1.Items.Add(dt.Rows[i][1]); // Title column
          }
      }
      

      然后,使用listBox1_SelectedIndexChanged中的LINQ获取对应的电影信息。

      private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
      {
          var query = from p in dt.AsEnumerable()
                      where p.Field<string>("Title") == ((ListBox)sender).Text
                      select new
                      {
                          id = p.Field<int>("Id"),
                          title = p.Field<string>("Title"),
                          name = p.Field<string>("Name")
                      };
      
          textBox1.Text = "Id:" + query.FirstOrDefault().id + "\r\n"
                          + "Title:" + query.FirstOrDefault().title + "\r\n"
                          + "Name:" + query.FirstOrDefault().name;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 2012-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多