C# 单击ListView行时在Imagebox中显示图像
我有个小问题。我希望在单击ListView控件行时,从我的Sql表中获取要在图像控件中显示的图像数据。我正在使用C#WPF和Microsoft SQL 现在我已经可以将图像插入到数据库中了,但我遇到的问题是,单击ListView中的一行后,我似乎无法检索图像数据? 这是我尝试过的编码 这是我用来填充ListView的编码:C# 单击ListView行时在Imagebox中显示图像,c#,sql,wpf,listview,C#,Sql,Wpf,Listview,我有个小问题。我希望在单击ListView控件行时,从我的Sql表中获取要在图像控件中显示的图像数据。我正在使用C#WPF和Microsoft SQL 现在我已经可以将图像插入到数据库中了,但我遇到的问题是,单击ListView中的一行后,我似乎无法检索图像数据? 这是我尝试过的编码 这是我用来填充ListView的编码: private void FillEmployeeListView() { string ConString = ConfigurationM
private void FillEmployeeListView()
{
string ConString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string CmdString = string.Empty;
using (SqlConnection CON = new SqlConnection(ConString))
{
CmdString = "SELECT EmployeeEmailAddress, EmployeePassword, EmployeeDepartment, EmployeeIDNumber, EmployeeName, EmployeeSurname, EmployeeGender, EmployeeDOB, EmployeeHomeAddress, EmployeeTelephoneNumber, EmplyeeCity, EmployeeProvinceCode, EmployeeProfilePicture FROM Main.tblEmployeeLoginDetails";
SqlCommand CMD = new SqlCommand(CmdString, CON);
SqlDataAdapter SDA = new SqlDataAdapter(CMD);
DataTable DT = new DataTable("Main.tblEmployeeLoginIDetails");
SDA.Fill(DT);
lvDisplayEmployeeInformation.ItemsSource = DT.DefaultView;
}
}
private void lvDisplayEmployeeInformation_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int selectedRow = lvDisplayEmployeeInformation.SelectedIndex;
if (selectedRow != -1)
{
DataView DS = (DataView)lvDisplayEmployeeInformation.ItemsSource;
string ColumnEmailAddress = DS.Table.Rows[selectedRow].ItemArray[0].ToString();
string ColumnPassword = DS.Table.Rows[selectedRow].ItemArray[1].ToString();
string ColumnDepartment = DS.Table.Rows[selectedRow].ItemArray[2].ToString();
string ColumnIDNumber = DS.Table.Rows[selectedRow].ItemArray[3].ToString();
string ColumnName = DS.Table.Rows[selectedRow].ItemArray[4].ToString();
string ColumnSurname = DS.Table.Rows[selectedRow].ItemArray[5].ToString();
string ColumnGender = DS.Table.Rows[selectedRow].ItemArray[6].ToString();
string ColumnDOB = DS.Table.Rows[selectedRow].ItemArray[7].ToString();
string ColumnHomeAddress = DS.Table.Rows[selectedRow].ItemArray[8].ToString();
string ColumnTelephoneNumber = DS.Table.Rows[selectedRow].ItemArray[9].ToString();
string ColumnCity = DS.Table.Rows[selectedRow].ItemArray[10].ToString();
string ColumnProvinceCode = DS.Table.Rows[selectedRow].ItemArray[11].ToString();
string ColumnProfilePicture = DS.Table.Rows[selectedRow].ItemArray[12].ToString();
txtEmailAddress.Text = ColumnEmailAddress;
pbPassword.Password = ColumnPassword;
txtDepartment.Text = ColumnDepartment;
txtIDNumber.Text = ColumnIDNumber;
txtName.Text = ColumnName;
txtSurname.Text = ColumnSurname;
txtGender.Text = ColumnGender;
txtDOB.Text = ColumnDOB;
txtHomeAddress.Text = ColumnHomeAddress;
txtTelephoneNumber.Text = ColumnTelephoneNumber;
txtCity.Text = ColumnCity;
txtProvinceCode.Text = ColumnProvinceCode;
imgProfilePicture.Source = _img;
我的ListView的My SelectionChanged事件:
private void FillEmployeeListView()
{
string ConString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string CmdString = string.Empty;
using (SqlConnection CON = new SqlConnection(ConString))
{
CmdString = "SELECT EmployeeEmailAddress, EmployeePassword, EmployeeDepartment, EmployeeIDNumber, EmployeeName, EmployeeSurname, EmployeeGender, EmployeeDOB, EmployeeHomeAddress, EmployeeTelephoneNumber, EmplyeeCity, EmployeeProvinceCode, EmployeeProfilePicture FROM Main.tblEmployeeLoginDetails";
SqlCommand CMD = new SqlCommand(CmdString, CON);
SqlDataAdapter SDA = new SqlDataAdapter(CMD);
DataTable DT = new DataTable("Main.tblEmployeeLoginIDetails");
SDA.Fill(DT);
lvDisplayEmployeeInformation.ItemsSource = DT.DefaultView;
}
}
private void lvDisplayEmployeeInformation_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int selectedRow = lvDisplayEmployeeInformation.SelectedIndex;
if (selectedRow != -1)
{
DataView DS = (DataView)lvDisplayEmployeeInformation.ItemsSource;
string ColumnEmailAddress = DS.Table.Rows[selectedRow].ItemArray[0].ToString();
string ColumnPassword = DS.Table.Rows[selectedRow].ItemArray[1].ToString();
string ColumnDepartment = DS.Table.Rows[selectedRow].ItemArray[2].ToString();
string ColumnIDNumber = DS.Table.Rows[selectedRow].ItemArray[3].ToString();
string ColumnName = DS.Table.Rows[selectedRow].ItemArray[4].ToString();
string ColumnSurname = DS.Table.Rows[selectedRow].ItemArray[5].ToString();
string ColumnGender = DS.Table.Rows[selectedRow].ItemArray[6].ToString();
string ColumnDOB = DS.Table.Rows[selectedRow].ItemArray[7].ToString();
string ColumnHomeAddress = DS.Table.Rows[selectedRow].ItemArray[8].ToString();
string ColumnTelephoneNumber = DS.Table.Rows[selectedRow].ItemArray[9].ToString();
string ColumnCity = DS.Table.Rows[selectedRow].ItemArray[10].ToString();
string ColumnProvinceCode = DS.Table.Rows[selectedRow].ItemArray[11].ToString();
string ColumnProfilePicture = DS.Table.Rows[selectedRow].ItemArray[12].ToString();
txtEmailAddress.Text = ColumnEmailAddress;
pbPassword.Password = ColumnPassword;
txtDepartment.Text = ColumnDepartment;
txtIDNumber.Text = ColumnIDNumber;
txtName.Text = ColumnName;
txtSurname.Text = ColumnSurname;
txtGender.Text = ColumnGender;
txtDOB.Text = ColumnDOB;
txtHomeAddress.Text = ColumnHomeAddress;
txtTelephoneNumber.Text = ColumnTelephoneNumber;
txtCity.Text = ColumnCity;
txtProvinceCode.Text = ColumnProvinceCode;
imgProfilePicture.Source = _img;
最后,这是我想用来在数据库中转换/插入和检索图像的编码:
private void SetImage(Binary data)
{
if (data == null)
{
imgProfilePicture.BeginInit();
imgProfilePicture.Source = null;
imgProfilePicture.EndInit();
return;
}
_img = new BitmapImage();
_img.BeginInit();
_img.StreamSource = new MemoryStream(data.ToArray());
_img.EndInit();
imgProfilePicture.BeginInit();
imgProfilePicture.Source = _img;
imgProfilePicture.EndInit();
}
private Binary GetImageBinary()
{
if (imgProfilePicture.Source == null)
return null;
Stream stream = _img.StreamSource;
Byte[] buffer = null;
if (stream != null && stream.CanRead && stream.Length > 0)
{
//Die Binary reader return 'n empty byte array :(
using (BinaryReader br = new BinaryReader(stream))
{
buffer = br.ReadBytes((int)stream.Length);
}
}
return new Binary(buffer);
}
单击listview中的一行后,我已经可以将数据库中的文本插入文本框。有什么想法吗
编辑:我得到的错误如下:“未找到适合完成此操作的成像组件。”图像未显示的原因可能有很多。。。您需要提供更多信息(而不是更多代码)。你调试代码了吗?您的
二进制数据
变量是否有值?问题是在数据库中还是在WPF中?@Sheridan Hi,谢谢您的回复!问题是它没有给我任何错误或应用程序崩溃?单击ListView中的一行后,我不知道如何在Imagebox中正确显示图像。