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);
            }
        }
    }
}

0 ответов

Другие вопросы по тегам