Я использовал C # + SQL Server 2012, Winforms.У меня есть основная форма и закрепление панели для отображения дочернего элемента:
Код для открытия дочернего элемента [usercontrol].
pncontent.Controls.Clear();
classinfo.ucon = new ProjectUserControls.U_user();
classinfo.ucon.Dock = DockStyle.Fill; // ucon is the declare of usercontrol
pncontent.Controls.Add(classinfo.ucon); // now the child shown already in main form panel.
Метод поиска в @U_user [это usercontrol]
public void searchingdata()
{
if (!txtsearch.Text.Equals("")) // this txtsearch is declared at the top to receive the string from main from textbox named txtsearchmain.
{
while (dgvuser.Rows.Count > 0)
{
dgvuser.Rows.Clear();
}
string data = "select tb_user.id, tb_user.UID, tb_user.EID, tb_employee.Name, tb_employee.Surname, tb_user.UserName, tb_user.Password, tb_user.Status, FORMAT(tb_user.Date,'dd-MM-yyyy') as Date from tb_user, tb_employee where tb_user.Boolean = 'True' and tb_user.EID = tb_employee.EID and (tb_user.UID LIKE'%" + txtsearch.Text + "%' or tb_user.EID LIKE'%" + txtsearch.Text + "%' or tb_user.UserName LIKE'%" + txtsearch.Text + "%' or tb_user.Password LIKE'%" + txtsearch.Text + "%' or tb_user.Status LIKE'%" + txtsearch.Text + "%' ) order by tb_user.id desc";
DataTable dt = ClassConnection.DBFactory(data, "tbname");
if (dt.Rows.Count > 0)
{
foreach (DataRow item in dt.Rows)
{
int x = dgvuser.Rows.Add();
dgvuser.Rows[x].Cells[0].Value = item["id"].ToString();
dgvuser.Rows[x].Cells[1].Value = item["UID"].ToString();
dgvuser.Rows[x].Cells[2].Value = item["EID"].ToString();
dgvuser.Rows[x].Cells[3].Value = item["Name"].ToString() + " " + item["Surname"].ToString();
dgvuser.Rows[x].Cells[4].Value = item["UserName"].ToString();
dgvuser.Rows[x].Cells[5].Value = item["Password"].ToString();
dgvuser.Rows[x].Cells[6].Value = item["Status"].ToString();
dgvuser.Rows[x].Cells[7].Value = item["Date"].ToString();
}
MessageBox.Show(dt.Rows.Count.ToString() + " Found");//Test messagebox.
}
else
{
MessageBox.Show("Not found.","Message . . . . .");
return;
}
}
else
{
MessageBox.Show("Fill with Searching string.", "Message . . . . . .");
return;
}
}
Я протестировал его с окном сообщений
MessageBox.Show(dt.Rows.Count.ToString() + " Found"); // you can see in the searching method.
Окно сообщений отображается, но сетка данных не обновляется.
строка ввода текста, которую я заполняю для поиска, принадлежитОсновная форма и кнопка Поиск также относятся к основной форме.Метод поиска и представление данных принадлежат к @U_user или дочерней форме.
Нажатие кнопки поиска в главной форме.
if (!txtseaarchmain.Text.Equals(""))
{
if (menufrmname.Text == "user")
{
ProjectUserControls.U_user user = new ProjectUserControls.U_user();
user.txtsearch.Text = txtseaarchmain.Text;//txtsearch is the textbox I declare in the top of the @U_user child. And the txtsearchmain is the textbox receive the input in main form.
user.searchingdata();
}
}
Это означает, что когда я заполняю строку @Admin в txtsearchmain в mainи затем я нажимаю кнопку, она отправляет строку @Admin в txtsearch на дочернем, а затем я вызываю метод поиска на дочернем, как упоминалось в коде.Мне нужно, чтобы сетка данных обновляла данные, где статус пользователя @ Admin.
Теперь код читается также в основных и дочерних формах обеих сторон.Тестовое окно сообщений, о котором я упоминал выше, говорит мне, что количество строк, которое он нашел как @ Admin.
Означает, что код работает.
Проблема в том, что представление данных не обновляет нужные мне данные.