我已经为这个工作了一个小时,但我仍然不知道为什么在点击对话框中的“NO”按钮后没有刷新listview的原因是什么。
我有frmCompanyList(主窗体),下面是listview,我有frmCompanyEntry(childform)。
我已经尝试使用此Refresh()
,但它无效。但是如果我点击我的frmCompanyList中的“刷新”按钮就可以了。
所以这是我的代码:
frmCompanyEntry:
DialogResult dialogResult = MessageBox.Show(Global._strInsertAgainMsg + "company?", Global._strTitleMsg, MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
clearAll();
}
else if (dialogResult == DialogResult.No)
{
this.Close();
clearAll();
frmCompanyList _company = new frmCompanyList();
_company.PerformRefresh();
}
然后是frmCompanyList:
public void PerformRefresh()
{
__toolCmbStatus.SelectedIndex = 1;
loadCompany(__toolTxtSearch.Text);
}
public void loadCompany(string _strSearch)
{
try
{
ListViewItem Item;
__lvwCompany.Items.Clear();
string _strWhereStatement = "(fldCode LIKE '" + "%" + _strSearch + "%" + "' OR fldCompany LIKE '" + "%" + _strSearch + "%" + "' OR fldAddress LIKE '" + "%" + _strSearch + "%" + "' OR fldContactNo LIKE '" + "%" + _strSearch + "%" + "' OR fldContactPerson LIKE '" + "%" + _strSearch + "%" + "')";
if (__toolCmbStatus.SelectedIndex.ToString() != "2")
{ _strQry = "SELECT * FROM tblCompany WHERE " + _strWhereStatement + " AND fldActive = '" + __toolCmbStatus.SelectedIndex.ToString() + "' ORDER BY fldCompany ASC"; }
else
{ _strQry = "SELECT * FROM tblCompany WHERE " + _strWhereStatement + " ORDER BY fldCompany ASC"; }
using (SQLConnect.SqlCommandEx _SQLCMD = new SQLConnect.SqlCommandEx(_strQry))
{
DataTable dt = _SQLCMD.GetDataTable();
__lblTotalRecord.Text = dt.Rows.Count.ToString();
if (dt.Rows.Count == 0)
{
Item = new ListViewItem("");
Item.SubItems.Add(Global._strEmptyMsg);
Item.SubItems[0].ForeColor = System.Drawing.Color.Red;
__lvwCompany.Items.Add(Item);
}
else
{
foreach (DataRow DR in dt.Rows)
{
Item = new ListViewItem(DR[0].ToString());
Item.SubItems.Add(DR[2].ToString());
Item.SubItems.Add(DR[3].ToString());
Item.SubItems.Add(DR[4].ToString());
Item.SubItems.Add(DR[5].ToString());
Item.SubItems.Add(DR[1].ToString());
if (DR[6].ToString() == "False")
{
Item.SubItems.Add("Inactive");
Item.SubItems[6].ForeColor = System.Drawing.Color.Red;
for (int x = 0; x <= 6; x++)
{
Item.SubItems[x].Font = new Font(__lvwCompany.Font, FontStyle.Italic);
}
Item.UseItemStyleForSubItems = false;
}
else
{
Item.SubItems.Add("Active");
Item.SubItems[6].ForeColor = System.Drawing.Color.Green;
Item.UseItemStyleForSubItems = false;
}
__lvwCompany.Items.Add(Item);
}
}
}
}
catch (Exception ex) { MessageBox.Show("Please contact your administrator. Error: " + ex, Global._strTitleMsg); }
}
答案 0 :(得分:1)
问题出在线上。
frmCompanyList _company = new frmCompanyList();
您实例化表单,调用加载数据的方法,但不实际显示表单。如果您在刷新后致电_company.Show()
,则会看到您刷新的列表(但使用其他主表格实例)
您希望以已打开的形式刷新数据,而不是重复。在这种情况下,您必须将frmCompanyList(父窗体)的引用传递给子窗体(frmCompanyEntry)。您可以通过构造函数或某些属性来实现。
在frmCompanyEntry表单中,添加属性
frmCompanyList _company = null;
像这样修改你的frmCompanyEnty构造函数
public frmCompanyEntry(frmCompanyList parent)
{
this._company = parent;
}
当打开frmCompanyEntry时,从父节点开始,修改如下:
frmCompanyEntry _entry = new frmCompanyEntry(this);
_entry.ShowDialog();
这样您就可以传递对子表单的引用,因此您可以在代码中刷新它。
您现有的代码应该是这样的(注意缺少行frmCompanyList _company = new frmCompanyList()
):
DialogResult dialogResult = MessageBox.Show(Global._strInsertAgainMsg + "company?", Global._strTitleMsg, MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
clearAll();
}
else if (dialogResult == DialogResult.No)
{
this.Close();
clearAll();
_company.PerformRefresh();
}