C # Заполнить Gridview из выпадающего списка - PullRequest
0 голосов
/ 03 июня 2011

Я перепробовал все, но не могу понять, как заполнить сетку с помощью моего выпадающего списка.Я проверил значение выпадающего меню, и оно верное, и в сетке отображаются все элементы, но не те, которые мне нужны.Я использую веб-форму.Ниже мой код.

protected void Page_Load(object sender, EventArgs e)
        {
            Populate();
        }

        protected void btnDisplay_Click(object sender, EventArgs e)
        {
            SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString);
            myConnection.Open();

            try
            {
                SqlDataReader reader = null;
                string serverIP = drpChoose.SelectedItem.Value.ToString();
                SqlCommand cmd = new SqlCommand("SELECT * from ScheduledTasks WHERE ServerIP = " + serverIP, myConnection);

                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    GridView1.DataSource = reader;
                    GridView1.DataBind();
                }
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            myConnection.Close();
        }

        public void Populate()
        {
            SqlConnection myConnection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString);
            myConnection1.Open();

            SqlCommand cmd1 = new SqlCommand("SELECT ServerIP FROM Servers", myConnection1);
            SqlDataReader dropReader;
            dropReader = cmd1.ExecuteReader();

            drpChoose.DataSource = dropReader;
            drpChoose.DataTextField = "ServerIP";
            drpChoose.DataValueField = "ServerIP";
            drpChoose.DataBind();
        }
    }

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

1 голос
/ 03 июня 2011

Вы должны также применить параметризацию sql. Это поможет предотвратить атаки SQL-инъекций. Какой ваш код в настоящее время уязвим.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

0 голосов
/ 03 июня 2011

Просто руководство: почему бы не использовать элемент управления Ajaxtoolkit UpdatePanel.Поместите Gridview в UpdatePanel, затем установите выпадающий список в качестве Updatetrigger для Gridview. Тогда вам не придется беспокоиться о обратной передаче и значениях.

0 голосов
/ 03 июня 2011

Измените ваш метод Page_Load на:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack()) {
        Populate();
    }
}

При каждой загрузке страницы вы повторно привязываете раскрывающийся список, так что значение по умолчанию «все» всегда будет установлено. Используя свойство Page.IsPostBack, вы указываете, что страница должна связываться только при первой загрузке, а не при последующих возвратах. При использовании этого свойства выбранный элемент в раскрывающемся списке не будет изменяться при обратных передачах.

MSDN: Page.IsPostBack

Обновление

Что касается вашего комментария о предложении "Где" в вашем операторе SQL, хранится ли serverIP в базе данных в виде текста? Попробуйте обернуть serverIP апострофами, например:

SqlCommand cmd = new SqlCommand("SELECT * from ScheduledTasks WHERE ServerIP = '" + serverIP + "'', myConnection);
0 голосов
/ 03 июня 2011

Вам не нужно перепривязывать выпадающий список после каждого сообщения обратно, иначе вы потеряете выбранный элемент.Попробуйте ниже:

protected void Page_Load(object sender, EventArgs e)
        {
        if(!Page.IsPostBack)
            {
            Populate();                
            }

    }

    protected void btnDisplay_Click(object sender, EventArgs e)
    {
        SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString);
        myConnection.Open();

        try
        {
            SqlDataReader reader = null;
            string serverIP = drpChoose.SelectedItem.Value.ToString();
            SqlCommand cmd = new SqlCommand("SELECT * from ScheduledTasks WHERE ServerIP = " + serverIP, myConnection);

            reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                GridView1.DataSource = reader;
                GridView1.DataBind();
            }
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        myConnection.Close();
    }

    public void Populate()
    {
        SqlConnection myConnection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString);
        myConnection1.Open();

        SqlCommand cmd1 = new SqlCommand("SELECT ServerIP FROM Servers", myConnection1);
        SqlDataReader dropReader;
        dropReader = cmd1.ExecuteReader();

        drpChoose.DataSource = dropReader;
        drpChoose.DataTextField = "ServerIP";
        drpChoose.DataValueField = "ServerIP";
        drpChoose.DataBind();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...