c# - 如何显示正确的数据?
问题描述
我有 2 个 datagridviews 现在我想在第一个 datagridview 中选择一个名为“名称”的列,并将其作为查询中的 WHERE 从表中选择值并将其放入另一个 datagridview。
SqlCommand cmd = new SqlCommand();
cmd = ss.CreateCommand();
foreach (DataGridViewRow row in dgvAtt.Rows)
{
ss.Open();
cmd.CommandType = CommandType.Text;
string Query = "SELECT Signature FROM TBL_Student WHERE Name = '" +
row.Cells[4].Value.ToString() + "' ";
cmd.CommandText = Query;
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter dp = new SqlDataAdapter(cmd);
dp.Fill(dt);
dgvSign.DataSource = dt;
ss.Close();
}
但是当有空时它给了我错误并且它只选择第一个datagridview中的第一行。
解决方案
您在每个foreach
循环中创建一个新的DataTable
,因此它总是只有一个值。所以你必须在 foreach 循环之前创建它。
并确保Values
在使用它们之前检查要使用的内容。有了这个简单if
的条件,就不会有任何问题。
编辑1:
这个代码片段工作得很好。只需更改ConnectionString
即可。
DataTable dt = new DataTable();
string error;
using (SqlConnection con = new SqlConnection(@"Data Source=SERVER;Initial Catalog=DATEBASE; User ID=USERNAME; Password=PASSWORD"))
{
SqlCommand cmd = new SqlCommand();
foreach (DataGridViewRow row in dgvAtt.Rows)
{
string Query = "SELECT Signature FROM TBL_Student WHERE Name = '";
if (row.Cells.Count >= 4 && row.Cells[4].Value != null)
{
Query += row.Cells[4].Value.ToString();
}
Query += "'";
try
{
cmd = new SqlCommand(Query, con);
if (con.State == ConnectionState.Closed)
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
}
catch (Exception ex)
{
error = ex.Message;
}
}
}
dgvSign.DataSource = dt;
推荐阅读
- javascript - 切换到另一个视频并连续重复
- django - 注释返回的单个元素而不是分组
- c - 如何检查两个文件的内容是否相同?
- python - np.arange 不能按预期使用浮点参数
- c++ - 操作系统和编译器如何通信以启动程序编译
- sharepoint - if子句和share Point
- java - 为什么 Optional 不提供 peek 方法?
- android - 是否可以有两种相同的样式但具有不同的值?
- java - 预期为 BEGIN_ARRAY,但在第 1 行第 53 列路径 $.data 处为 BEGIN_OBJECT
- java - 添加自定义 Eclipse 完成,如 sysout