不在文本框中显示所选项目
Not appear the selected items in textBox
我想在我的文本框中检索 object 信息。在我的例子中,我想从数据库中检索电影详细信息,当我点击电影标题时,我想显示来自我的 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);
}
}
}
这是电影 table 的样子:
下一行是问题所在:
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
数据 :)
可以使用LINQ查询数据表,不需要定义MyMovie
class.
首先,要在列表框中显示电影标题,请按以下方式修改 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;
}
我想在我的文本框中检索 object 信息。在我的例子中,我想从数据库中检索电影详细信息,当我点击电影标题时,我想显示来自我的 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);
}
}
}
这是电影 table 的样子:
下一行是问题所在:
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
数据 :)
可以使用LINQ查询数据表,不需要定义MyMovie
class.
首先,要在列表框中显示电影标题,请按以下方式修改 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;
}