在你的帮助下,我做了两个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
显示来自其他客户端的已选中复选框,但也显示此客户端的未选中复选框。它只显示数据库中的所有内容,因此它显示了具有其他客户端的已检查内容的行(但只有那些对于此和其他客户端相同的那些行,它是DOESNT CREATE重复项)。第二个节目只检查了这个客户端,但没有他没有选择的那个。因此,当我编辑这个客户端时,我想显示他检查了什么,其余7(7种可能性,他没有检查,所以我可以检查它们)。现在我只能显示我检查的内容(没有未选中)或包括其他客户端检查在内的所有内容(对于此客户端都是相同的)。我希望这是可以理解的,抱歉我的英语不好。
P.S。检查我的意思是检查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.因为SELECT值从未被任何客户b4选中。你可以看到帽子“Nic”被显示,因为它不在表klisluz中。
答案 0 :(得分:2)
如果我理解你所追求的是什么,这就是阻止你在klisluz中获取没有条目的行的部分:
WHERE zajsluz.akce= '{0}' and klisluz.subkey ='" + vyberradek + "'
对于klisluz中不存在的行,子键将为NULL,这与WHERE子句的任何内容都不匹配。要获取这些行,您可以使用以下命令替换当前的WHERE子句:
WHERE zajsluz.akce= '{0}' and ISNULL(klisluz.subkey, '" + vyberradek + "') ='" + vyberradek + "'
以下是完整的代码:
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);
确定是否应选中复选框:
if (precti3.HasRows)
{
precti3.Read();
if (precti3.Item("subkey") != Null)
{
row.Cells[5].Value = true;
}
else
{
row.Cells[5].Value = false;
}
}
我认为就是它在C#中的表现。我在VB.NET工作,使用在线转换器。