Удаление записей из GridView и БД с помощью (флажок и кнопка удаления) - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть GridView1, объявленный как:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None" DataKeyNames="Case_ID">
  <Columns>
      <asp:TemplateField>
           <ItemTemplate><asp:CheckBox ID="cb" runat="server" /></ItemTemplate>
      </asp:TemplateField>
      <asp:TemplateField  HeaderText="No.">
           <ItemTemplate><%# Container.DataItemIndex + 1 %></ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField  HeaderText="Case Title"  DataField="caseTitle"/>
      <asp:BoundField  HeaderText="Age" DataField="age" />
      <asp:BoundField  HeaderText="Gender"  DataField="gender"/>
      <asp:BoundField  HeaderText="Treated By" DataField="owner"/>
      <asp:BoundField  HeaderText="Added Date"  DataField="sDate"/>
      <asp:BoundField  HeaderText=""  DataField="Case_ID" Visible="false"/>
  </Columns>
</asp:GridView>

, и это DataTable, который я использую в качестве источника данных для него

DataTable aTable = new DataTable();

aTable.Columns.Add("caseTitle", typeof(string));
aTable.Columns.Add("age", typeof(string));
aTable.Columns.Add("gender", typeof(string));
aTable.Columns.Add("owner", typeof(string));
aTable.Columns.Add("sDate", typeof(string));
aTable.Columns.Add("Case_ID", typeof(int));
I want to use Case_ID as an index for the GridView, so I can delete a record from database when I check its check box in the GridView.

, вот сценарий:

GridView отображает информацию о случаях из базы данных. Пользователь может установить флажки и затем нажать кнопку [Удалить], это действие должно удалить записи из базы данных;

Когда я выполняю этот код в кнопке [Удалить]:

foreach (GridViewRow row in GridView1.Rows)
{
    CheckBox c = (CheckBox)row.FindControl("cb");

    if (c.Checked)
    {
        int rowIndex = GridView1.SelectedIndex;
        string id = GridView1.DataKeys[rowIndex].Value.ToString();
        ds.DeleteCommand = " delete from Cases where Case_ID=" + id + "";
        ds.Delete();
    } 
}

Я обнаружил, что c всегда равен нулю, даже когда я проверяю некоторые записи;так что проблема в том, что он не обнаруживает изменение в флажке, что я могу сделать, чтобы оно было обнаружено?

1 Ответ

0 голосов
/ 20 февраля 2012

Где кнопка удаления ... попробуйте найти подходящую кнопку-флажок с помощью атрибута "аргумент" кнопки удаления. Я обычно помещаю идентификатор строки, которую я хочу удалить, в качестве значения атрибута аргумента кнопки. Вот почему мне не нужно искать флажок ... (на стороне клиента я использую событие щелчка клиента флажка, чтобы обновить атрибут аргумента кнопки удаления).

Еще одно слово о безопасности: используйте хранимую процедуру, чтобы избежать проблем безопасности (никогда не ставьте оператор удаления - или любой оператор SQL - как жестко запрограммированный в C # ...).

EDIT:

проверьте также:

     GridViewRow.RowType==RowType.DataRow 

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

...