如果datagrid为空,我每隔30分钟尝试刷新一次表单。我的代码如下:
[error] required: no arguments
[error] found: java.lang.String
[error] reason: actual and formal argument lists differ in length
[error] .mapValues(value -> Path.process(value));
当数据网格的RowCount为private void Form1_Load(object sender, EventArgs e)
{
BindDataGrid();
if (dataGrid_FileList.RowCount <=0)
{
Timer refreshTimer = new Timer();
refreshTimer.Interval = 30000; //30 seconds in milliseconds
refreshTimer.Tick += new EventHandler(refreshTimer_Tick);
refreshTimer.Start();
}
}
void refreshTimer_Tick(object sender, EventArgs e)
{
this.Controls.Clear();
this.InitializeComponent();
BindDataGrid();
if (dataGrid_FileList.RowCount>0)
{
InhouseDownloadeer_Shown(this, null);
}
}
时,此代码可以很好地工作,但即使在数据网格包含行<=0
之后它仍在继续。如果datagrid包含行,我该如何阻止refreshTimer_Tick?
答案 0 :(得分:1)
您也可以停止计时器。在方法之外声明timer变量。
Timer refreshTimer = new Timer();
private void Form1_Load(object sender, EventArgs e)
{
refreshTimer.Interval = 30000;
refreshTimer.Tick += new EventHandler(refreshTimer_Tick);
}
现在只需在另一种方法中调用refreshTimer.Stop();
。
PS asp.net
和winforms
不是一回事。
答案 1 :(得分:1)
您可以在数据绑定方法之后调用if语句。我认为它会在datagrid绑定行之前执行。
对我来说,你应该从refreshTimerTick事件中删除这段代码:
if (dataGrid_FileList.RowCount>0)
{
InhouseDownloadeer_Shown(this, null);
}
喜欢:
void refreshTimer_Tick(object sender, EventArgs e)
{
this.Controls.Clear();
this.InitializeComponent();
BindDataGrid();
}
并将其放入DataBount事件
void dataGrid_DataBound(object sender, EventArgs e)
{
if (dataGrid_FileList.RowCount>0)
{
InhouseDownloadeer_Shown(this, null);
}
}