Как проверить и снять флажки listview в соответствии со значениями БД?
I have this code that will check the listview checkbox if the condition is met.
con = new SqlConnect(); con.SqlQuery("Select * from EmployeeDeduct where EmployeeeID = @empID"); con.cmd.Parameters.AddWithValue("@empID", lblEmpID.Text); sda = new SqlDataAdapter(con.cmd); ds = new DataSet(); sda.Fill(ds); con.cmd.Connection.Close(); if (ds.Tables[0].Rows.Count > 0) { for (int g = 0; g < ds.Tables[0].Rows.Count; g++) { con = new SqlConnect(); con.SqlQuery("Select * from DeductionInfo"); sda = new SqlDataAdapter(con.cmd); DataSet ds2 = new DataSet(); sda.Fill(ds2); con.cmd.Connection.Close(); if (ds2.Tables[0].Rows.Count > 0) { for (int j = 0; j < ds2.Tables[0].Rows.Count; j++) { if (ds.Tables[0].Rows[g].ItemArray[0].ToString().Contains(ds2.Tables[0].Rows[j].ItemArray[6].ToString())) { LvDeductions.Items[j].Checked = true; } } }
I have it inside textbox textchanged. When I click the listview value, the checkbox will be checked according to db values, but when I click another item, the previous checkboxes still have checked and it will just add a check on checkboxes inside the listview. <pre> What I have tried: I put ELSE statement with LvDeductions.Items[j].Checked = false; but when I do, it uncheck the boxes that does not meet the condition but only check one box instead of two or more.
Maciej Los
Извините, но ваше описание вопроса неясно.
Richard Deeming
Этот код не имеет никакого смысла и выглядит ужасно неэффективным и склонным к сбою, если количество элементов в нем LvDeductions
не соответствует количеству строк в таблице DeductionInfo
стол.
Почему вы загружаете все это целиком DeductionInfo
стол несколько раз? Вы можете просто загрузить его один раз, вне внешнего цикла.
Я подозреваю, что ваши вложенные циклы могут быть заменены одним SQL-запросом. Но без знания структуры ваших таблиц или того, что именно вы пытаетесь сделать, невозможно сказать вам, как это сделать.
James Dean
Моя ошибка Я удалил DeductionInfo из цикла for
James Dean
Мне удалось исправить это, обновив ListView, который имеет флажок. Код находится здесь,
con = new SqlConnect(); con.SqlQuery("Select * from DeductionInfo"); ListViewDed(); //LvDeductions.Items.Clear(); con = new SqlConnect(); con.SqlQuery("Select Firstname, Lastname, Department, Position from EmpRecord inner join EmpRecord2 on EmpRecord.empID = EmpRecord2.empID where EmpRecord.empID = @id"); con.cmd.Parameters.AddWithValue("@id", lblEmpID.Text); sdr = con.cmd.ExecuteReader(); if (sdr.Read()) { lblEmployeeName.Text = sdr[1].ToString() + "," + " " + sdr[0].ToString(); lblEmpDept.Text = sdr[2].ToString() + "," + " " + sdr[3].ToString(); } con = new SqlConnect(); con.SqlQuery("Select * from EmployeeDeduct where EmployeeeID = @empID"); con.cmd.Parameters.AddWithValue("@empID", lblEmpID.Text); sda = new SqlDataAdapter(con.cmd); ds = new DataSet(); sda.Fill(ds); con.cmd.Connection.Close(); if (ds.Tables[0].Rows.Count > 0) { for (int g = 0; g < ds.Tables[0].Rows.Count; g++) { con = new SqlConnect(); con.SqlQuery("Select * from DeductionInfo"); sda = new SqlDataAdapter(con.cmd); DataSet ds2 = new DataSet(); sda.Fill(ds2); con.cmd.Connection.Close(); if (ds2.Tables[0].Rows.Count > 0) { for (int j = 0; j < ds2.Tables[0].Rows.Count; j++) { if (ds.Tables[0].Rows[g].ItemArray[0].ToString() == ds2.Tables[0].Rows[j].ItemArray[6].ToString()) { LvDeductions.Items[j].Checked = true; } } } } }
Я хочу изменить этот код,
LvDeductions.Items[j].Checked = true;
В это,
con = new SqlConnect(); con.SqlQuery("Select * from DeductionInfo where DeductID like @id"); con.cmd.Parameters.AddWithValue("@id", ds2.Tables[0].Rows[j].ItemArray[6].ToString()+"");
Я попробовал использовать подстановочный знак вот так
con.cmd.Parameters.AddWithValue("@id", ds2.Tables[0].Rows[j].ItemArray[6].ToString()+"%");
и все равно показывает мне один ряд вместо трех. Я меняю % на _ и получаю ошибку, что в позиции 0 нет строки.
Maciej Los
Используйте "улучшить виджет вопросов" и предоставьте соответствующую информацию.