2013-09-18 2 views
0

Я пытаюсь удалить строку в табличном виде программно
Я создал этот GridViewУдаление строки с использованием gridview_rowdeleting события

<asp:GridView ID="GridView1" CssClass="HeaderTables" runat="server" AllowPaging="True" 
    EmptyDataText="There is no data record to display" 
    AllowSorting="True" AutoGenerateColumns="false" 
    CellPadding="0" Height="0px" Width="800px" 
    onpageindexchanging="GridView1_PageIndexChanging" 
    onsorting="GridView1_Sorting" onrowdeleting="GridView1_RowDeleting"> 
    <Columns> 
     <asp:BoundField DataField="first_name" HeaderText="First name"/> 
     <asp:BoundField DataField="last_name" HeaderText="Last name"/> 
     <asp:BoundField DataField="mobile_phone" HeaderText="Mobile number"/> 
     <asp:BoundField DataField="email" HeaderText="Email"/> 
     <asp:BoundField DataField="city" HeaderText="City"/> 
     <asp:BoundField DataField="street_number" HeaderText="Street number"/> 

     <asp:CommandField ShowEditButton="True" ButtonType="Button" /> 
     <asp:CommandField ShowDeleteButton="True" ButtonType="Button" /> 
    </Columns> 
    <HeaderStyle HorizontalAlign="Left" /> 
    <RowStyle HorizontalAlign="Left" /> 
</asp:GridView> 

и мой код за это:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    if (MessageBox.Show("Are you sure you want to delete this data?", 
    "Confirm delete", MessageBoxButtons.YesNo) == DialogResult.Yes) 
    { 

     MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mySqlString"].ConnectionString); 
     MySqlCommand cmd = new MySqlCommand("DELETE FROM persons WHERE id = @id", conn); 
     MySqlParameter param = new MySqlParameter(); 

     try 
     { 
      int rowID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value); 
      cmd.Parameters.AddWithValue("@id", rowID); 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      GridView1.DataBind(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
} 

Я получение ошибки:
Указатель был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс

ответ

0

В вашей сетке не задано свойство DataKeyNames, поэтому эта сетка не отслеживает какие-либо datakeys. Вероятно, именно поэтому вы получаете индексную ошибку.

Необходимо установить свойство DataKeyNames. В вашем коде вам также нужно проверить, чтобы коллекция содержала элементы. Сама коллекция datakeys может быть не нулевой, но она может содержать нулевые элементы.

+0

Где я должен добавить свойство DataKeyName? Можете ли вы написать мне код, который, по вашему мнению, будет работать. Я ищу по всему Интернету, но не могу найти ничего, что сработает для меня. – PUDEV

+0

Если вы взяли datakey (первичный ключ) в своей таблице «лица», вы должны указать DataKeyNames = «id» в своей сетке. Здесь я беру «id» в качестве вашего datakey Просто добавьте DataKeyNames = "id" в свою сетку после '

+0

Это то, что я получаю при добавлении DataKeyName =" id "DataBinding: 'System.Data.DataRowView' не содержит свойства с именем 'ID' – PUDEV

0

Использование DataKeyNames = "ID" как

<asp:GridView ID="GridView1" CssClass="HeaderTables" runat="server" AllowPaging="True" 
    EmptyDataText="There is no data record to display" DataKeyNames="ID" 
    AllowSorting="True" AutoGenerateColumns="false" 
    CellPadding="0" Height="0px" Width="800px" 
    onpageindexchanging="GridView1_PageIndexChanging" 
    onsorting="GridView1_Sorting" onrowdeleting="GridView1_RowDeleting"> 
    <Columns> 
     <asp:BoundField DataField="first_name" HeaderText="First name"/> 
     <asp:BoundField DataField="last_name" HeaderText="Last name"/> 
     <asp:BoundField DataField="mobile_phone" HeaderText="Mobile number"/> 
     <asp:BoundField DataField="email" HeaderText="Email"/> 
     <asp:BoundField DataField="city" HeaderText="City"/> 
     <asp:BoundField DataField="street_number" HeaderText="Street number"/> 

     <asp:CommandField ShowEditButton="True" ButtonType="Button" /> 
     <asp:CommandField ShowDeleteButton="True" ButtonType="Button" /> 
    </Columns> 
    <HeaderStyle HorizontalAlign="Left" /> 
    <RowStyle HorizontalAlign="Left" /> 
</asp:GridView> 

Тогда он будет работать для вас

+0

Я получаю эту ошибку: DataBinding: «System.Data.DataRowView» не содержит свойства с именем «ID». – PUDEV

+0

id будет именем столбца, на котором вы удаляете – naval

+0

Я исправляю это вчера, я теперь мое событие работает, спасибо в любом случае :) – PUDEV

0

Вы забыли добавить DataKeyNames к вашему GridView

DataKeyNames="Valid Column Name" //Column name here instead of Valid Column name 

Полный код ниже:

<asp:GridView ID="GridView1" DataKeyNames="Valid Column Name" CssClass="HeaderTables" runat="server" AllowPaging="True" 
    EmptyDataText="There is no data record to display" 
    AllowSorting="True" AutoGenerateColumns="false" 
    CellPadding="0" Height="0px" Width="800px" 
    onpageindexchanging="GridView1_PageIndexChanging" 
    onsorting="GridView1_Sorting" onrowdeleting="GridView1_RowDeleting"> 
    <Columns> 
     <asp:BoundField DataField="first_name" HeaderText="First name"/> 
     <asp:BoundField DataField="last_name" HeaderText="Last name"/> 
     <asp:BoundField DataField="mobile_phone" HeaderText="Mobile number"/> 
     <asp:BoundField DataField="email" HeaderText="Email"/> 
     <asp:BoundField DataField="city" HeaderText="City"/> 
     <asp:BoundField DataField="street_number" HeaderText="Street number"/> 

     <asp:CommandField ShowEditButton="True" ButtonType="Button" /> 
     <asp:CommandField ShowDeleteButton="True" ButtonType="Button" /> 
    </Columns> 
    <HeaderStyle HorizontalAlign="Left" /> 
    <RowStyle HorizontalAlign="Left" /> 
</asp:GridView> 
Смежные вопросы