Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Sử dụng checkbox trong Gridview ASP.NET - khi check vao checkbox không thay đổi trạng thái checked

  1. #1
    Ngày gia nhập
    09 2009
    Bài viết
    1

    Unhappy Sử dụng checkbox trong Gridview ASP.NET - khi check vao checkbox không thay đổi trạng thái checked

    Xin chào các bro,
    Mong các bro giúp đỡ, em thấy có vài topic gần giống của em rồi nhưng lỗi của em k thấy nói đến.
    Em đang làm việc với 1 cái GridView. Code aspx như sau:
    Code:
    <asp:GridView ID="gvCourseReferenceList" runat="server" 
                AutoGenerateColumns="False">
            <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <a href="courseReferenceManager.aspx?courseId=<%# Eval("IdCourse") %>&idReference=<%#Eval("idReference") %>&action=showReferenceDetails">
                            Hiển thị
                            </a>                        
                            <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="True" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="idReference">
                            <ItemTemplate>
                                <%# Eval("idReference")%>
                            </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ReferenceTitle">
                            <ItemTemplate>
                                <%# Eval("ReferenceTitle")%>
                            </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ReferenceDescription">
                            <ItemTemplate>
                                <%# Eval("ReferenceDescription")%>
                            </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="FileLink">
                            <ItemTemplate>
                                <%# Eval("FileLink")%>
                            </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ExtraLink">
                            <ItemTemplate>
                                <%# Eval("ExtraLink")%>
                            </ItemTemplate>
                    </asp:TemplateField>   
                    <asp:TemplateField HeaderText="ReferenceRank">
                            <ItemTemplate>
                                <%# Eval("ReferenceRank")%>
                            </ItemTemplate>
                    </asp:TemplateField>   
                    <asp:TemplateField HeaderText="LecturerName">
                            <ItemTemplate>
                                <%# Eval("LecturerName")%>
                            </ItemTemplate>
                    </asp:TemplateField>   
                    <asp:TemplateField HeaderText="SubjectName">
                            <ItemTemplate>
                                <%# Eval("SubjectName")%>
                            </ItemTemplate>
                    </asp:TemplateField>   
                    <asp:TemplateField HeaderText="CourseCode">
                            <ItemTemplate>
                                <%# Eval("CourseCode")%>
                            </ItemTemplate>
                    </asp:TemplateField>   
                    <asp:TemplateField HeaderText="IdCourse">
                            <ItemTemplate>
                                <%# Eval("IdCourse")%>
                            </ItemTemplate>
                    </asp:TemplateField>  
                </Columns>
            </asp:GridView>
    Còn bên CodeBehind em viết như sau :
    Code:
    if (gvCourseReferenceList.Rows.Count > 0)
            {
                for (int i = 0; i < gvCourseReferenceList.Rows.Count; i++)
                {
    
                    GridViewRow objDataRow = gvCourseReferenceList.Rows[i];
                    bool isChecked = ((CheckBox)objDataRow.FindControl("CheckBox2")).Checked;               
    
                    if (isChecked)
                    {
                        Label15.Text += gvCourseReferenceList.Rows[i].Cells[3].Text;
                    }
                }
            }
    Khi em bug thì điều kiện IF đã thỏa mãn.
    Có điều vào trong vòng FOR thì cái objDataRow của em nó bị nhận giá trị NULL
    và cái biến isChecked cũng bằng False.
    Các bro cho em xin ý kiến, em đang rất cần.
    Many thanks !

  2. #2
    Ngày gia nhập
    10 2010
    Nơi ở
    Quận 9
    Bài viết
    13

    bool isChecked = ((CheckBox)objDataRow.FindControl("CheckBox2")).Ch ecked;
    bạn thêm thành: bool isChecked = ((CheckBox)objDataRow.Cells[0].FindControl("CheckBox2")).Checked;

  3. #3
    Ngày gia nhập
    04 2011
    Bài viết
    44

    Hix, em cũng bị giống hệt bác này, mò mãi mà không ra, làm theo cách của bác kyozanuro cũng không đuọc ,ai biết chỉ giúp em voi
    Đã được chỉnh sửa lần cuối bởi tiphudianxin12 : 14-10-2011 lúc 12:30 PM.

  4. #4
    Ngày gia nhập
    10 2010
    Nơi ở
    Quận 9
    Bài viết
    13

    Mình đã test thử rồi mới post cách của mình Cells[0] do control cần lấy ở cột 0. Muốn FindControl trong gridView thì bạn phải chỉ rõ tọa độ của nó. Ở đây vòng lặp của bạn skyline17 là chính xác, chỉ thiếu chưa xác định Cells. Còn của bạn thế nào post thử mình xem

  5. #5
    Ngày gia nhập
    04 2011
    Bài viết
    44

    của em đây

    code aspx
    Code:
    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" Width="652px" 
                              onselectedindexchanged="GridView1_SelectedIndexChanged">
                              <Columns>
                                  <asp:TemplateField >
                                      
                                      <ItemTemplate>
                                          <asp:CheckBox ID="CheckBox1" runat="server"  />
                                          
                                      </ItemTemplate>
                                  </asp:TemplateField>
                              </Columns>
                          </asp:GridView>
    code behind

    Code:
     for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                GridViewRow row = GridView1.Rows[i];
                bool isChecked = ((CheckBox)row.Cells[0].FindControl("CheckBox1")).Checked; 
    
                if (isChecked)
                {
    
                    Label2.Text = GridView1.Rows[i].Cells[2].Text;
                }
                else
                {
                    Label2.Text = "Không có kết quả";
                }
            }
    dù check hay không check thì kết quả vẫn la " không có kết quả", ischecked luôn là false, bác kiểm tra giúp em với

  6. #6
    Ngày gia nhập
    10 2010
    Nơi ở
    Quận 9
    Bài viết
    13

    Mặc định Sử dụng checkbox trong Gridview ASP.NET - khi check vao checkbox không thay đổi trạng thái checked

    checkbox của bạn thiếu autopostback <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" A />

  7. #7
    Ngày gia nhập
    04 2011
    Bài viết
    44

    Em viết cho sự kiện onclick của 1 button mà bác
    Code:
    protected void Button1_Click(object sender, EventArgs e)
        {
          
    
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                GridViewRow row = GridView1.Rows[i];
                bool isChecked = ((CheckBox)row.Cells[0].FindControl("CheckBox1")).Checked; 
    
                if (isChecked)
                {
    
                    Label2.Text = "có kết quả";
                }
                else
                {
                    Label2.Text = "Không có kết quả";
                }
            }
    nếu đặt autopostback thì cứ check là nó gửi kết quả lên sever rồi

  8. #8
    Ngày gia nhập
    10 2010
    Nơi ở
    Quận 9
    Bài viết
    13

    Bạn dùng:
    Code:
    if (isChecked)
                {
    
                    Label2.Text = "có kết quả";
                }
                else
                {
                    Label2.Text = "Không có kết quả";
                }
    thì kết quả sẽ phụ thuộc vào row cuối cùng. Nếu muốn biết là có 1 ô đc check trong tất cả các row thì dùng return...

  9. #9
    Ngày gia nhập
    04 2011
    Bài viết
    44

    Cảm ơn bác , em cũng vừa mớin hận ra điều này và đã bò dòng else đi, đồng thời em cũng hiểu tại sao không check được, đó là vì em đổ dữ liệu vào gridview thông qua code behind, chứ không khai báo dữ liệu đổ vào trong gridview trong aspx . khi khai báo như vầy trong aspx
    Code:
    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" Width="652px" 
                              onselectedindexchanged="GridView1_SelectedIndexChanged">
                              <Columns>
                                  <asp:TemplateField >
                                      
                                      <ItemTemplate>
                                          <asp:CheckBox ID="CheckBox1" runat="server"  />
                                          
                                      </ItemTemplate>
                                  </asp:TemplateField>
                              </Columns>
                          </asp:GridView>
    thì câu lênh không hoạt động, nhưng nếu khai báo gridview theo kiểu có dòng dữ liệu trước
    Code:
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                              DataSourceID="SqlDataSource1">
                              <Columns>
    <asp:TemplateField >
                                      
                                      <ItemTemplate>
                                          <asp:CheckBox ID="CheckBox1" runat="server"  />
                                      </ItemTemplate>
                                  </asp:TemplateField>
    <asp:BoundField DataField="PersonID" HeaderText="PersonID" 
             InsertVisible="False" ReadOnly="True" SortExpression="PersonID" />
       <asp:BoundField DataField="Name" HeaderText="Name" 
                                           SortExpression="Name" />
        </Columns>
                          </asp:GridView>
    thì mọi chuyện lại ok, tuy nhiên như vậy thì mình lại không tùy biến được câu lệnh sql, không biết có cách nào không nhỉ

  10. #10
    Ngày gia nhập
    10 2010
    Nơi ở
    Quận 9
    Bài viết
    13

    đó là vì em đổ dữ liệu vào gridview thông qua code behind
    Mình test thử cho bạn bằng cách này(trong code behind)
    Code:
    if (!IsPostBack)
            {
                int[] a = { 0, 1, 2, 3, 4 };
                GridView1.DataSource = a;
                this.DataBind();
            }
    vẫn OK mà.
    Bạn nói tùy biến câu lệnh sql?, mình chưa hiểu ý bạn. Yahoo của mình đây có gì pm nhé ->kyozanuro

Các đề tài tương tự

  1. Làm sao chỉ cho check 1 RadioButton (hoặc CheckBox) trên GridView mà không dùng javascript?
    Gửi bởi laodaika trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 08-07-2012, 11:10 PM
  2. Để checkbox ở trạng thái checked sau khi nhập vào textbox khoảng 5s
    Gửi bởi hoangtucodon121 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 07-11-2011, 03:21 PM
  3. Điều khiển checkbox của 1 trang web có sẵn (Code để tự động check 1 checkbox)
    Gửi bởi kscntt trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 4
    Bài viết cuối: 05-08-2011, 08:24 AM
  4. Xác định checked cho checkbox trong datalist
    Gửi bởi TheHalfHeart trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 12
    Bài viết cuối: 02-06-2011, 03:58 PM
  5. Cách nào giới hạnh số lượng check các checkbox trong datagridview?
    Gửi bởi hoanghuynh2409 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 28-08-2010, 09:38 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn