2009-10-05 1 views
0

Я пытаюсь удалить строку из gridview и базы данных ... Он должен быть удален, если в gridview нажата кнопка delte linkbutton. Я получаю индекс строки следующим образом :удалить строку из выбранного gridview и базы данных

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)sender; 
    GridViewRow row = (GridViewRow)btn.NamingContainer; 
    if (row != null) 
    { 
    LinkButton LinkButton1 = (LinkButton)sender; 

    // Get reference to the row that hold the button 
    GridViewRow gvr = (GridViewRow)LinkButton1.NamingContainer; 

    // Get row index from the row 
    int rowIndex = gvr.RowIndex; 
    string str = rowIndex.ToString(); 
    //string str = GridView1.DataKeys[row.RowIndex].Value.ToString(); 
    RemoveData(str); //call the delete method 

    } 
} 

теперь я хочу, чтобы удалить его ... так что я имею проблемы с этим кодом .. я получаю сообщение об ошибке

Необходимо объявить скалярную переменную «@original_MachineGroupName» ... любые предложения

private void RemoveData(string item) 
{ 
    SqlConnection conn = new SqlConnection(@"Data Source=JAGMIT-PC\SQLEXPRESS; 
    Initial Catalog=SumooHAgentDB;Integrated Security=True"); 
    string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
       @original_MachineGroupID; 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    cmd.Parameters.AddWithValue("@original_MachineGroupID", item); 

    conn.Open(); 

    cmd.ExecuteNonQuery(); 
    conn.Close(); 
} 

Blockquote

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SumooHAgentDBConnectionString %>" 
    SelectCommand="SELECT MachineGroups.MachineGroupID, MachineGroups.MachineGroupName, 
    MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, 
    MachineGroups.CanBeDeleted, COUNT(Machines.MachineName) AS Expr1, 
    DATENAME(month, (MachineGroups.TimeAdded - 599266080000000000)/864000000000) + 
    SPACE(1) + DATENAME(d, (MachineGroups.TimeAdded - 599266080000000000)/
    864000000000) + 
    ', ' + DATENAME(year, (MachineGroups.TimeAdded - 599266080000000000)/
    864000000000) AS Expr2 FROM MachineGroups FULL OUTER JOIN Machines ON 
    Machines.MachineGroupID = MachineGroups.MachineGroupID GROUP BY 
    MachineGroups.MachineGroupID, MachineGroups.MachineGroupName, 
    MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, 
    MachineGroups.CanBeDeleted" 
    DeleteCommand="DELETE FROM [MachineGroups] WHERE 
        [MachineGroupID] [email protected]_MachineGroupID" > 
     <DeleteParameters> 
      <asp:Parameter Name="@original_MachineGroupID" Type="Int16" /> 
      <asp:Parameter Name="@original_MachineGroupName" Type="String" /> 
      <asp:Parameter Name="@original_MachineGroupDesc" Type="String" /> 
      <asp:Parameter Name="@original_CanBeDeleted" Type="Boolean" /> 
      <asp:Parameter Name="@original_TimeAdded" Type="Int64" /> 
     </DeleteParameters> 
</asp:SqlDataSource> 

Я все еще получаю ошибку: Необходимо объявить скалярную переменную "@original_MachineGroupID"

ответ

0

Вы не добавив параметр @original_MachineGroupName к вашему запросу. Ваш запрос ссылается на несколько переменных, и вы добавили только один из них.

cmd.Parameters.AddWithValue("@original_MachineGroupID", item); 
cmd.Parameters.AddWithValue("@original_MachineGroupName", itemName); 
cmd.Parameters.AddWithValue("@original_MachineGroupDesc", itemDesc); 
cmd.Parameters.AddWithValue("@original_CanBeDeleted", true); 
cmd.Parameters.AddWithValue("@original_TimeAdded", time); 

Вам нужно будет найти дополнительную информацию, чтобы удовлетворить ваш запрос, или изменить свой запрос, чтобы устранить необходимость в них.

+0

поэтому мне нужно передать все значения, такие как itemname, itemdesc и т. Д. Индивидуально ?? Я просто убираю номер строки, который нужно удалить .. Есть ли более простой способ для этого. Спасибо – user175084

+0

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

+0

Я упростил запрос на удаление, как указано выше. Stll он не удаляет .. это единственный способ удалить строки ... пожалуйста, помогите – user175084

0

У вас есть несколько параметров в вашем запросе i.e. @original_MachineGroupName, но только добавление одного действительного параметра к вам командный объект. Вам потребуется один для каждого параметра в запросе.

+0

есть простой способ сделать это ... любой пример или ссылка будет отличной .. – user175084

0

Следующий код удаляет строку из базы данных, если строка, которую вы передаете методу является первичным или уникальным ключом в таблице:

string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
        @original_MachineGroupID"; 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    cmd.Parameters.AddWithValue("@original_MachineGroupID", item); 
+0

сэр я пробовал эту команду .. он все еще не работает .. Я знаю, что команда права ... все еще может помочь me .. есть ли какая-то проблема с моей страницей .aspx? Я отправил код сверху .. – user175084

0

Следите также привязки данных. Если вы удалите строку из базы данных, которая не удалит данные из gridview. Вам нужно будет повторно извлечь данные и привязать их обратно.

+0

сэр функция удаления сама не работает .. пожалуйста, можете сказать мне простой способ сделать это ... Я не знаю, почему что-то не работает? – user175084

+0

Основная проблема, я думаю, что он не получает идентификатор машинной группы, который он должен удалить ... insted, он получает номер строки.поэтому, когда я нажимаю на удаление, ничего не происходит ... – user175084