Невозможно удалить строки в GridView (PosgtesQL) с помощью команды _RowDeleting - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть веб-приложение asp.net, и мне нужно удалить строки в моем GridView1, который работает с PostgreSQL. Мне нужно удалить строки, но мне не нужно использовать ObjectDataSource. Вот мой метод GridView1_RowDeleting:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        int ID2 = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);


        string constr = ConfigurationManager.ConnectionStrings["postgresConnectionString"].ConnectionString;
        using (NpgsqlConnection cn = new NpgsqlConnection(constr))
        {
            string query = "DELETE FROM mainpage WHERE id=@ID";
            NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
            cmd.Parameters.Add("@ID2", NpgsqlDbType.Integer).Value = ID2;
            cn.Open();
            cmd.ExecuteNonQuery();
        }     

А вот мой GridView в файле .aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" Width="1650px" AutoGenerateDeleteButton="True" OnRowDeleting="GridView1_RowDeleting" >

Каждый раз, когда я нажимаю кнопку удаления, я получаю сообщение об ошибке: «Индекс выходит за пределы диапазона. Индекс должен быть положительным числом, и его размер не должен превышать размер коллекции. Имя параметра: индекс ". Я думаю, что проблема в моем Int Id. Что я пробовал:

int ID = (int)GridView1.DataKeys[e.RowIndex].Value;
string ID = GridView1.DataKeys[e.RowIndex].Value.ToString(); and much more...

1 Ответ

0 голосов
/ 07 сентября 2018

Я думаю, ArgumentOutOfRangeException произошло, потому что вы не устанавливаете свойство атрибута DataKeyNames в сетке, следовательно, индекс строки все еще находится за пределами границ при вызове e.RowIndex. Вы должны установить для него имя столбца идентификатора / первичного ключа следующим образом:

DataKeyNames="[ID or PK column name]"

Вот пример использования:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="id" 
              AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" 
              Width="1650px" AutoGenerateDeleteButton="True" OnRowDeleting="GridView1_RowDeleting">
</asp:GridView>

Обновление 1

Кроме того, я обнаружил несоответствие имени параметра в этом запросе:

string query = "DELETE FROM mainpage WHERE id=@ID";
NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
cmd.Parameters.Add("@ID2", NpgsqlDbType.Integer).Value = ID2;

Правильный вариант должен быть таким, как пример ниже:

string query = "DELETE FROM mainpage WHERE id=@ID";
NpgsqlCommand cmd = new NpgsqlCommand(query, cn);
cmd.Parameters.Add("@ID", NpgsqlDbType.Integer).Value = ID2;

Ссылка: Свойство GridView.DataKeyNames

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...