2011-07-06 61 views
22

Tôi có GridView với một cột hộp kiểm (phần còn lại của GridView đang được điền từ cơ sở dữ liệu). Tôi đang sử dụng AJAX để thực hiện các chức năng khác nhau, và tôi tự hỏi nếu tôi chỉ không gọi sự kiện OnCheckedChanged ở đúng nơi. Nó có nên được bọc trong một số loại UpdatePanel không? Tôi vẫn còn thực sự mới để làm thế nào tất cả các công trình này ... về cơ bản những gì tôi đang nhắm đến là thay đổi một giá trị bit trong cơ sở dữ liệu của tôi khi một hộp kiểm được kiểm tra. Tôi biết logic của việc làm thế nào để làm điều đó, tôi chỉ không biết nếu tôi đang giải quyết sự kiện OnCheckedChanged của tôi đúng cách.OnCheckedThay đổi sự kiện không kích hoạt

cs

 protected void CheckBoxProcess_OnCheckedChanged(Object sender, EventArgs args) 
    { 
     CheckBox checkbox = (CheckBox)sender; 
     GridViewRow row = (GridViewRow)checkbox.NamingContainer; 
     OrderBrowser.Text += "CHANGED"; 
    } 


    } 

.aspx

<html xmlns="http://www.w3.org/1999/xhtml"> 

 <asp:DropDownList runat="server" ID="orderByList" AutoPostBack="true"> 
      <asp:ListItem Value="fName" Selected="True">First Name</asp:ListItem> 
      <asp:ListItem Value="lName">Last Name</asp:ListItem> 
      <asp:ListItem Value="state">State</asp:ListItem> 
      <asp:ListItem Value="zip">Zip Code</asp:ListItem> 
      <asp:ListItem Value="cwaSource">Source</asp:ListItem> 
      <asp:ListItem Value="cwaJoined">Date Joined</asp:ListItem> 
     </asp:DropDownList> 
    </div> 
    <div> 
     <asp:Label runat="server" ID="searchLabel" Text="Search For: " /> 
     <asp:TextBox ID="searchTextBox" runat="server" Columns="30" /> 
     <asp:Button ID="searchButton" runat="server" Text="Search" /> 
    </div> 
<div> 
<asp:UpdatePanel ID = "up" runat="server"> 
<Triggers> 
    <asp:AsyncPostBackTrigger ControlID = "orderByList" 
    EventName="SelectedIndexChanged" /> 
    <asp:AsyncPostBackTrigger ControlId="searchButton" EventName="Click" /> 
</Triggers> 

<ContentTemplate> 
<div align="center"> 
    <asp:GridView ID="DefaultGrid" runat = "server" DataKeyNames = "fName" 
    onselectedindexchanged = "DefaultGrid_SelectedIndexChanged" 
    autogenerateselectbutton = "true" 
    selectedindex="0"> 
    <SelectedRowStyle BackColor="Azure" 
    forecolor="Black" 
    font-bold="true" /> 
    <Columns> 
    <asp:TemplateField HeaderText="Processed"> 
       <ItemTemplate> 
        <asp:CheckBox ID="CheckBoxProcess" runat="server" Enabled="true" OnCheckedChanged = "CheckBoxProcess_OnCheckedChanged" /> 
       </ItemTemplate> 
      </asp:TemplateField> 

    </Columns> 
    </asp:GridView> 
    </div> 
    <asp:TextBox ID="OrderBrowser" columns="100" Rows="14" runat="server" Wrap="false" TextMode="MultiLine" ReadOnly = "true"> 
    </asp:TextBox> 
    </ContentTemplate> 
    </asp:UpdatePanel> 



</div> 
</form> 

Trả lời

54

Thử bật Tự động khởi động lại để kiểm soát hộp kiểm.

<asp:CheckBox ID="CheckBoxProcess" runat="server" Enabled="true" OnCheckedChanged = "CheckBoxProcess_OnCheckedChanged" AutoPostBack="true" /> 

Đây có thể là lý do khiến phương thức của bạn không được gọi.

+0

Khi tôi làm điều này việc kiểm tra xuất hiện cho giống như 2 giây, và sau đó biến mất. Có thể nó chỉ là như vậy bởi vì tôi không xử lý bất cứ điều gì trong cơ sở dữ liệu? Tôi muốn nó được khi có một giá trị nhất định trong DB, kiểm tra hoặc xuất hiện hoặc biến mất. Tuy nhiên, mã thử nghiệm của tôi không cho thấy phương thức đang được gọi ... –

+0

Có thể, nó đáng để nhập một số dữ liệu giả chỉ để kiểm tra chức năng. – JConstantine

+0

Tôi đã thử nghiệm nó và thử nghiệm không hiển thị gì cả :( –

-1

Vui lòng thử để kiểm tra giá trị với DB:

Checked='<%# Convert.ToBoolean(Eval("Processed"))%>'

Các vấn đề liên quan