首页 > 解决方案 > C#/DataTable/DataGrid/SQL - 如何从 DataGridView 将参数插入存储过程

问题描述

感谢您花时间阅读本文。基本上我要做的是返回通过存储过程从数据库中提取的[问题]的详细信息

有 2 个参数,[IssueNo][LineNo]。当我单击一个按钮时,程序需要返回详细信息,例如:我选择的每个 DataGridRow 的 ItemName、Code 等,但它当前所做的是返回 LAST [Issues] 详细信息,而不是我在网格中选择的详细信息。

我知道我的存储过程是正确的,但是在我的 C# 代码中的某个地方,参数没有得到我选择的每一行的值。只有一个,它仍然是错误的

foreach (DataRow dr in dataGridView2.SelectedRows)
{
    IssueNo = Convert.ToInt32(dr[0].ToString());
    TranLineNo = Convert.ToInt32(dr[1].ToString()); 
}

detailsCmd.Parameters.AddWithValue("IssueNo", IssueNo);
detailsCmd.Parameters.AddWithValue("TranLineNo", TranLineNo);
DetailsIssue details1 = new DetailsIssue();

SqlDataAdapter Idetails = new SqlDataAdapter(detailsCmd);
Idetails.Fill(detailsReturned);

details1.dgvIssuesDetail.DataSource = detailsReturned;
details1.Show();

这是查找存储过程参数的代码。

https://prnt.sc/qybxvs这里是应用程序的样子,红色是选定的行,单击后单击的详细信息按钮会将黑色的 IssueNo 和 TranLineNo 传递给存储过程,然后返回详细信息选择的问题。它返回正确的数据想法,但针对错误的问题。如果我选择多行,它仍然只返回一个

如果您需要任何其他附加信息,请随时询问。我耐心等待你的回复

标签: c#asp.net.netsql-serverstored-procedures

解决方案


所以我不完全确定我是如何修复它的,但这是我改变的,现在它可以工作了,所以对于任何有同样问题的人来说,这就是我为解决上述问题所做的,也许有人可以解释我做得比我做得更好

DataTable issueView = new DataTable();
SqlConnection issueConn = new SqlConnection(GetConnectionString());
issueConn.Open();
SqlCommand issueCmd = new SqlCommand("sp_Populate_Issue_View", issueConn)
{
    CommandType = CommandType.StoredProcedure
};
if (chkHideReturned.Checked == true)
{
    issueCmd.Parameters.AddWithValue("Codefrom", 100);
    issueCmd.Parameters.AddWithValue("Codeto", 100);

}
else
{
    issueCmd.Parameters.AddWithValue("Codefrom", 100);
    issueCmd.Parameters.AddWithValue("Codeto", 120);
}
SqlDataAdapter da2 = new SqlDataAdapter(issueCmd);
da2.Fill(issueView);
dataGridView2.DataSource = issueView;


推荐阅读