2017-02-13 7 views
0

У меня есть Gridview, который имеет 4 столбца. Все в ItemTemplate Один столбец - CheckBox. Этот Gridview привязан к источнику данных. То, что я хочу сделать, - это когда флажок установлен, обновить базу данных с битовым значением «1», и если я сниму флажок, чтобы сделать то же самое, но «0».Запустить событие, когда флажок установлен или снят. Gridview C#

Я уже знаю свой код SQL для обновления базы данных, но я не уверен, как запустить событие, чтобы он смотрел на текущую строку, включенную в gridview.

Вот столбец CheckBox.

<asp:TemplateField HeaderText="Pick" ItemStyle-CssClass="hrGrid" HeaderStyle-CssClass="hdrHrBase"> 
<ItemTemplate> 
<asp:CheckBox id="cbViewCustomer" runat="server" OnCheckedChanged="ViewCustomer" onAutoPostBack="true" Checked='<%#(Eval("chosen"))%>'/>   
</ItemTemplate> 
</asp:TemplateField> 

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

protected void ViewCustomer(object sender, EventArgs e) 
    { 
     string SelectCustomer = "UPDATE tblcustomer Set chosen ='0'"; 
     NpgsqlCommand changedata = new NpgsqlCommand(SelectCustomer, con); 
     con.Open(); 
     changedata.ExecuteNonQuery(); 
     con.Close(); 

    } 

Или я должен делать что-то другое?

+0

Вы пробовали это? Это правильное решение. Хотя вы должны подумать, хотите ли вы сделать это сразу ... Обычно пользователи предполагают, что они могут редактировать вещи как черновики и сохранять только при нажатии кнопки «Сохранить», убедитесь, что это не так, и пользователи понимают, что проверка этого поля будет НЕМЕДЛЕННО обновлять объект как я нашел это может подчеркнуть людей – Milney

+0

Так как это обновляет весь столбец с тем же значением. Я просто обновляю текущую строку. – Tommy

+0

Что? Вам нужно опубликовать другой код, который делает обновление ... Вы можете, конечно, сделать то, что вам нужно, с обработчиком событий, подобным этому – Milney

ответ

1

Вы можете сделать это с OnRowCommand случае GridView, как это: -

ассоциировать событие RowCommand с GridView: -

<asp:GridView ID="mygridview" runat="server" OnRowCommand="mygridview_OnRowCommand"> 

Далее связать CommandName & CommandArgument к вашему флажком: -

<asp:TemplateField HeaderText="Pick" ItemStyle-CssClass="hrGrid" > 
    <ItemTemplate> 
    <asp:CheckBox id="cbViewCustomer" runat="server" Checked='<%#(Eval("chosen"))%>' 
     CommandName="myCheckbox" CommandArgument="<%# Container.DataItemIndex %>"/> 
    </ItemTemplate> 
</asp:TemplateField> 

В коде за рукояткой события: -

protected mygridview_OnRowCommand (object sender, GridViewCommandEventArgs e) 
{ 
    if(e.CommandName == "myCheckbox") 
    { 
      int rowIndex = Convert.ToInt32(e.CommandArgument); 
      GridViewRow row = mygridview.Rows[rowIndex]; 
      bool ischecked = (row.FindControl("cbViewCustomer") as CheckBox).Checked; 
    } 
} 

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

+0

Случай возвращает эту ошибку: Ошибка CS8070: элемент управления не может выпасть из оператора switch через финальную метку case «cbViewCustomer»: '(CS8070) (sbmanager) – Tommy

+0

@TommyMcGee - Это была проблема только с вопросом #C# case, которую я дал, например. вместо этого вы можете использовать обновленный код. –

+0

Я пробовал ваше предложение, но я не могу заставить его работать. Нет ошибки. просто ничего не происходит. У меня установлен OnRowCommand на gridview и CommandName, установленном на флажке. Но до сих пор ничего не происходит. – Tommy