- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个小型通讯录,它从 mssql 数据库中获取联系人详细信息。它有 3 个表:contacts、last_talk(上次我与联系人交谈+讨论的简短描述)和另一个表(即具有前 2 个表中的两个主键)
在我显示联系人的表单(选项卡控件的选项卡)上,我添加了 2 个列表框,一个加载并显示联系人姓名,第二个列表框为我选择的每个联系人加载“最后通话”列表,具体取决于有多少个联系人我与联系人“交谈”。
现在,当我在“对话列表”列表框中选择一个字段时,我尝试在数据库中的 label.Text 和 richTextBox.Text 内部显示。
我的数据库有 3 个表:1 个用于联系人,1 个用于讨论/谈话,1 个用于在前 2 个表之间创建关系。
这是部分代码:
private void PopulateSelectedTalk()
{
string query = "SELECT * FROM LastTalk WHERE Id = @ID";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = lstConversationList.SelectedValue;
connection.Open();
SqlDataReader rdr = command.ExecuteReader();
while (rdr.Read())
{
lblLastTalk.Text = rdr["LastTalkSubject"].ToString();
rtxtLastTalkDescription.Text = rdr["LastTalkDescription"].ToString();
}
rdr.Close();
connection.Close();
}
}
private void lstConversationList_SelectedIndexChanged(object sender, EventArgs e)
{
PopulateSelectedTalk();
}
我在这里发布了一个非常相似的问题:C# Displaying a sql database object's name in a label.Text property on "SelectedIndexChanged" Event
添加后
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = lstConversationList.SelectedValue;
成功了。
但是,现在当我尝试使用 lstConversationList.SelectedValue; 时我收到以下异常
An exception of type 'System.InvalidCastException' occurred in System.Data.dll but was not handled in user code Additional information: Failed to convert parameter value from a DataRowView to a Int32.
此行抛出异常:SqlDataReader rdr = command.ExecuteReader();
当我在上一期的 Debug模式下将鼠标悬停在“Listbox.SelectedValue”上时,我得到的值是“1”,当我将鼠标悬停在上面发布的代码中的“Listbox.SelectedValue”上时,我得到的值是“1” “系统.DataRowView”
这是上一个问题的代码(有效):
private void PopulateContactLabels()
{
string query = "SELECT * FROM Contact WHERE Id = @ID";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = lstContactList.SelectedValue;
connection.Open();
SqlDataReader rdr = command.ExecuteReader();
while (rdr.Read())
{
lblContactName.Text = rdr["Name"].ToString();
lblCompany.Text = rdr["Company"].ToString();
lblOccupation.Text = rdr["Occupation"].ToString();
lblPhoneNumber.Text = rdr["PhoneNumber"].ToString();
lblEmail.Text = rdr["Email"].ToString();
}
rdr.Close();
connection.Close();
}
}
我错过了什么/做错了什么?请帮忙!
编辑:设置 lstConversationlist 中项目的代码
private void PopulateTalkList()
{
string query = "SELECT a.LastTalkSubject FROM LastTalk a " + "INNER JOIN ContactLastTalk b ON a.Id = b.LastTalkId " +
"WHERE b.ContactId = @ContactId";
using (connection = new SqlConnection(connectionString))
using(SqlCommand command = new SqlCommand(query,connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.AddWithValue("@ContactId", lstContactList.SelectedValue);
DataTable lastTalkTable = new DataTable();
adapter.Fill(lastTalkTable);
lstConversationList.DisplayMember = "LastTalkSubject";
lstConversationList.ValueMember = "Id";
lstConversationList.DataSource = lastTalkTable;
}
}
最佳答案
问题的根源在于,您将 lstConversationList
的 DataSource 设置为 DataTable,却忘记将其 ValueMember
属性设置为包含该列表的列的名称。从 SelectedValue 属性检索的值。
当您将 DataSource 属性设置为 DataTable 时,ListBox.Items 集合中的每个项目都是 DataRowView。如果您不设置 ValueMember
属性,则 SelectedValue 无法知道从哪一列读取其返回值。它只是返回整个 DataRowView 实例,当然,这不是您要搜索的整数。
所以当你填写lstConversationList时不要忘记写
private void PopulateTalkList()
{
' NOTE. you need to add also the ID field to the select query
string query = @"SELECT a.Id, a.LastTalkSubject
FROM LastTalk a INNER JOIN ContactLastTalk b
ON a.Id = b.LastTalkId
WHERE b.ContactId = @ContactId";
using (connection = new SqlConnection(connectionString))
using(SqlCommand command = new SqlCommand(query,connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.AddWithValue("@ContactId", lstContactList.SelectedValue);
DataTable lastTalkTable = new DataTable();
adapter.Fill(lastTalkTable);
lstConversationList.DisplayMember = "LastTalkSubject";
lstConversationList.ValueMember = "Id";
lstConversationList.DataSource = lastTalkTable;
}
}
关于C# 显示sql数据库中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35240000/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!