我使用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中的搜索方法[是用户控件]
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.
显示消息框,但datagridview不刷新。
我要搜索的TEXTBOX填充字符串属于主表单,而按钮Search也属于主表单。搜索方法和datagridview属于@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然后单击按钮时,它将字符串@Admin发送给child中的txtsearch,然后按上述代码调用child中的Searching方法。我需要datagridview来刷新用户状态为@Admin的数据。
现在,代码也同时以主要形式和子形式读取。我上面提到的测试消息框告诉我,它以@Admin找到了多少行。
表示该代码有效。
问题在于datagridview无法刷新我需要的数据。