GridView теряет значение при выборе выпадающего
Я использую WMI для управления службами на удаленных серверах. У меня есть три текстовых поля. Два текстовых поля предназначены для ввода того, что сервис StartsWith(include.text) и EndsWith(exclude.text). Другое текстовое поле (txtbox1.Text) позволяет вам ввести имя сервера, которым вы хотите управлять сервисами. Как только эти имена служб собраны, они сохраняются в списке, который отправляется в GridView. GridView имеет раскрывающийся список, который позволяет запускать или останавливать службы. Проблема, которая у меня возникла, заключается в том, что после выбора в раскрывающемся списке запускается другой метод GridView_SelectedIndexChanged. Я получаю сообщение об ошибке. Имя "сервис" не существует в текущем контексте. Что я знаю, но как я могу получить доступ к сервису ManagementObject из метода Test(), не теряя никаких данных после выбора выпадающего списка GridView_SelectedIndexChanged. Учетные данные, которые использовались для доступа ко всем службам, работающим на этом сервере, теряются, поэтому для запуска или остановки служб не предпринимается никаких действий. Заранее спасибо.
private List<myServers> Test()
{
List<myServers> list = new List<myServers>();
ConnectionOptions options = new ConnectionOptions();
options.Username = "myUsername";
options.Password = "myPassword";
options.EnablePrivileges = true;
if (txtbox1.Text != string.Empty)
{
//Create the scope that will connect to the default root for WMI
var scope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", txtbox1.Text), options);
scope.Connect();
//Create a path to the services with the default options
ObjectGetOptions option = new ObjectGetOptions(null, TimeSpan.MaxValue, true);
ManagementPath spoolerPath = new ManagementPath("Win32_Service");
ManagementClass servicesManager = new ManagementClass(scope, spoolerPath, option);
try
{
//Get all of the services running on this server
using (ManagementObjectCollection services = servicesManager.GetInstances())
{
foreach (ManagementObject service in services)
{
if (service["Name"].ToString().StartsWith(include.Text))
{
if (!service["Name"].ToString().EndsWith(exclude.Text))
{
list.Add(new myServers() { Name = service["Name"].ToString(), State = service["State"].ToString(), Servers1 = txtbox1.Text });
}
}
}
}
}
catch (UnauthorizedAccessException)
{
throw;
}
}
GridView1.DataSource = list;
GridView1.DataBind();
return list;
}
Вот код для выпадающего списка после его выбора.
public void GridView_SelectedIndexChanged(object sender, EventArgs e)
{
List<myServers> list = Test();
GridViewRow gvr = ((DropDownList)sender).NamingContainer as GridViewRow;
if (gvr != null)
{
var ddlStatus = gvr.FindControl("ddlStatus") as DropDownList;
if (ddlStatus.SelectedValue != "Select")
{
if (ddlStatus.SelectedValue == "1")
{
service.InvokeMethod("StartService", null);
}
else if (ddlStatus.SelectedValue == "2")
{
service.InvokeMethod("StopService", null);
}
}
}
}