我正在尝试基于comboBox选择填充DataGridView
。我不知道哪里出了问题——请帮帮我。。
这是我的代码:
public void GetTestGroups()
{
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlDataAdapter da = new SqlDataAdapter("select LabTestGroupId,GroupName from tbl_LabTestGroup", con);
DataTable dt = new DataTable();
da.Fill(dt);
cbTestGroup.DataSource = dt;
cbTestGroup.DisplayMember = "GroupName";
cbTestGroup.ValueMember = "LabTestGroupId";
}
}
private void cbTestGroup_SelectedIndexChanged(object sender, EventArgs e)
{
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
SqlDataAdapter da = new SqlDataAdapter("spGetTestNames", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@LabTestGroupId", cbTestGroup.SelectedValue.ToString());
DataTable dt = new DataTable();
da.Fill(dt);// Error in this line.
dgvLabTests.DataSource = dt;
}
}
我的存储过程:
create procedure spGetTestNames
@LabTestGroupId int
as
begin
select TestNames
from tbl_LabTests
where LabTestGroupId = @LabTestGroupId
end
当存储过程需要int
时,您正在将string
传递给它。像这样更改设置@LabTestGroupId
参数的代码。
da.SelectCommand.Parameters.AddWithValue(
"@LabTestGroupId",
int.Parse(cbTestGroup.SelectedValue.Item["LabTestGroupId"].ToString()));
或者,您需要确定如何将SelectedValue
转换为所需的int
值。我建议调试并在监视窗口中查看SelectedValue
,以确定它到底是什么以及如何获得所需的值。