2017-02-13 6 views
0

私は4つの列を持つGridviewを持っています。オールインItemTemplate 1つの列はCheckBoxです。このGridviewはデータソースにバインドされています。私がしたいのは、チェックボックスがチェックされてビット値 '1'のデータベースが更新され、チェックボックスのチェックを外して「0」と同じにすることです。Checkboxがチェックされている/チェックされていないときにイベントを実行するGridview C#

データベースを更新するためのSQLコードは既に知っていますが、イベントを実行して、グリッドビューのチェックボックスがオンになっている現在の行を確認する方法がわかりません。

ここに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

あなたは、このようなGridViewののOnRowCommandイベントでこれを行うことができます: -

准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; 
    } 
} 

checbox checkedイベントでも実行できますが、複数のコントロールがある場合は、個々のイベントではなくgridviewコマンドイベントを発生させます。

+0

ケースはこのエラーを返します:エラーCS8070:コントロールはswitch文から最後のcaseラベル 'case "cbViewCustomer": '(CS8070)(sbmanager) – Tommy

+0

@ TommyMcGee - これは、たとえば私が与えた_C#case文の問題でした。代わりに更新されたコードを使用することができます。 –

+0

私はあなたの提案を試みてきましたが、うまく動作しないようです。エラーはありません。ただ何も起こりません。 OnRowCommandをgridviewに設定し、CommandNameをチェックボックスに設定します。しかし、何も起こりません。 – Tommy

関連する問題