【发布时间】:2013-07-18 14:49:26
【问题描述】:
在你的帮助下,我制作了这两个QUERY。我发布了图片,因此您可以看到 green squares 中是我希望看到的空值,而 red squares 中是我不想显示的值。变量vyberradek 为“子键”插入值,它在数据库中是INT,但我通过string 传递它。
所以我将简化:现在我可以显示全部或部分,您能帮我如何显示正确的记录吗?
第一个query 这样做:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
这是第二个query 的作用:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' and klisluz.subkey ='" + vyberradek + "' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
如您所见,我还想显示空的。我认为您可能还需要检查复选框的代码:
for (int i = 0; i < dtg_ksluzby.Rows.Count; i++)
{
var row = dtg_ksluzby.Rows[i];
int id = (int)row.Cells["ID"].Value;
using (var novyprikaz3 = new SqlCommand("SELECT * from klisluz WHERE subkey='" + vyberradek + "'AND IDzajsluz=" + id, spojeni))
{
spojeni.Open();
SqlDataReader precti3 = novyprikaz3.ExecuteReader();
if (precti3.HasRows)
{
row.Cells[5].Value = true;
}
spojeni.Close();
}
}
请你们建议我query 应该如何选择未选中的值(在 klisluz 表中没有)和选中的值?
我看到没有人回复得这么好,让我举一个简单的例子:当我创建客户端时,我从 10 个复选框中选中了 3 个。所以它选择了 3 行(以及它添加到表 klisluz 中的那些)。我有这两个queries,First query 显示来自其他客户端的选中复选框,但也显示了该客户端的未选中复选框。它只是显示数据库中的所有内容,因此它显示带有其他客户端检查的内容的行(但只有那些与此客户端和其他一些客户端相同的行,它不会创建重复项)。第二个节目只检查了这个客户,但没有他没有选择的那些。所以当我编辑这个客户时,我想显示他检查了什么以及剩下的 7 个(他没有检查的 7 种可能性,所以我可以检查它们)。现在我可以只显示我检查的内容(没有未检查的)或包括其他客户端检查的所有内容(对于这个客户端来说是相同的)。我希望这是可以理解的,对不起我的英语不好。
附:用检查我的意思是检查checkbox(选择行)
基本上它是一个为客户添加服务的程序。
非常感谢您的关注,如果您阅读了所有内容,也感谢您的阅读。我在这个问题上坚持了 2 天:/
kwwallpe 的图片: 您可以在此处看到任何客户从未选择过“Nic”,因此它会显示出来。
为了让我的问题更清楚 - 我从另一个表中获取其中的一些列(如您在 sql 查询中所见)。
这是kwwallpe的代码:
string sQuery = string.Format("SELECT zajsluz.akce,zajsluz.text,klisluz.pocet,klisluz.subkey,zajsluz.ID FROM zajsluz LEFT JOIN klisluz ON zajsluz.ID=klisluz.IDzajsluz WHERE zajsluz.akce= '{0}' and ISNULL(klisluz.subkey, '" + vyberradek + "') = '" + vyberradek + "' GROUP BY klisluz.subkey,zajsluz.akce,zajsluz.text,klisluz.pocet,zajsluz.ID", sZakce);
这段代码非常接近我认为那 2。因为它选择了任何客户 b4 从未选择过的值。您可以看到帽子“Nic”被显示,因为它不在 klisluz 表中。
【问题讨论】:
标签: c# sql sql-server datagridview sqlcommand