我在检查时尝试让Checkbox接收多个值时遇到了一些问题。我正在使用动态GridView。选中复选框并单击“开始”按钮后,系统将启动服务。只有一个服务正在启动,而其他已检查服务的值读取为false。我知道我做错了什么。提前谢谢!
<asp:Panel ID="Panel1" runat="server">
<asp:GridView ID="GridView1" runat="server" Style="font-size: 15pt" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="ServiceName" HeaderText="Service Name" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:BoundField DataField="Status" HeaderText="Status" />
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="ChkStatus" Enabled="True" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
protected void strBtn_Click(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.Add("ServiceName", typeof(string));
dt.Columns.Add("Description", typeof(string));
dt.Columns.Add("Status", typeof(string));
string include = txtbox_Inclusion.Text;
string exclude = txtbox_Exclusion.Text;
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController service in services)
{
if (service.ServiceName.StartsWith(include) && !service.ServiceName.Contains(exclude))
{
var dro = dt.NewRow();
dro["ServiceName"] = service.ServiceName;
dro["Description"] = service.DisplayName;
dro["Status"] = service.Status;
dt.Rows.Add(dro);
for (int i = 0; i < GridView1.Rows.Count; i++)//loop the GridView Rows
{
CheckBox cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("ChkStatus"); //find the CheckBox
if (cb != null)
{
if (cb.Checked)
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running);
dro["Status"] = service.Status;
}
else if (cb.Checked && service.Status == ServiceControllerStatus.Running)
{
cb.Enabled = false;
}
}
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
}
答案 0 :(得分:2)
使用for循环完全迭代对象集合并不是正确的工具。考虑实施LINQ的foreach
循环,以确保您通过每个唱歌对象。
对于您的示例,不要使用for (int i = 0; i < GridView1.Rows.Count; i++)
,而是将其替换为:foreach(GridViewRow row in GridView1.Rows)
。
答案 1 :(得分:0)
我不是很确定,但我最初的回答是首先启动服务可能会将程序发送到另一个进程,它永远不会回到原来的“如果&#39;声明。不知道它是否有效,或者如何工作,但也许你需要为每个项目使用不同的线程?