We help IT Professionals succeed at work.

datagrid

service2001
service2001 asked
on
Medium Priority
2,766 Views
Last Modified: 2010-05-18
i have a datagrid and in that i have checkbox, everything is working fine except i found one thing that really bothering me.

when i check the checkbox like (1 or 2 or 5) and i click on save button then it gives me the value of whatever i have checked which is great but you will be only able to get the value of a current page not the next page

what i mean by that.

let say page one, i have check 3 checkbox and i go to page two and check 2 more checkbox so total is 5 correct, so when i hit the save button it give me the values for 2 not total 5 ? because it look for the current page only.

so my question is: how do i loop through all the RadGrid pages and get whatever is checked?

i'm using something like this now...

 foreach (DataGridItem item in dg.Items)
        {
            HtmlInputCheckBox chkBx = (HtmlInputCheckBox)item.FindControl("EmpId");
            if (chkBx != null && chkBx.Checked)
            {
               Response.Write(chkBx.Value + "<br>");
            }
        }
Comment
Watch Question

Author

Commented:

have a datagrid which has many pages (10 rows per page) and when I loop through the rows, I only get 10 rows (the rows that are currently showed in the current page) How can I get the total number of rows in all the pages?

hope i'm clear to my quesiton
You will need to write code so that the values for the checkbox is retained during postbacks. Take a look at the following article:

Persisting checked state across pages in a DataGrid
http://www.codeproject.com/aspnet/CheckStatePersisting.asp

--Nauman.

Author

Commented:
i have read that  and i guess my question is more into grabbing the check-box checked.

have a data-grid which has many pages (10 rows per page) and when I loop through the rows, I only get 10 rows (the rows that are currently showed in the current page) How can I get the total number of rows in all the pages?
just noticed: you are using HtmlInputCheckbox rather than using <asp:CheckBox>. For HTML controls being used in dg, you will need to have runat=server attribute in order to retrieve the value on runtime. I will recommend you change Html checkbox to asp:CheckBox controls. See if it works.

--Nauman.

Author

Commented:
thats my old code i was using and i a have <asp:checkbox......

 foreach (DataGridItem item in dg.Items)
        {
            CheckBox box = (CheckBox)item["TemplateColumn"].FindControl("checkBox1");
            if (box.Checked == true)
            {
                //get the checked orderid
                object _OrderID = dataItem["un_OrderID"].Text;
            }
           
        }

 still i'm getting only check box from the current page.
Make sure that you have asp:checkbox in datagrid column and try the following code:

foreach (DataGridItem item in dg.Items)
        {
            foreach(Control c in item.Cells[CHECKBOX_COLUMN_INDEX].Controls)
            if (c.GetType() == TypeOf(CheckBox))
            {
            CheckBox box = (CheckBox)c;
            if (box.Checked == true)
            {
                //get the checked orderid
                object _OrderID = dataItem["un_OrderID"].Text;
            }
            }
        }

--Nauman.

Author

Commented:
salam ahmed,

I'm getting few errors now:

    public void View_Selected(object sender, EventArgs e)
    {
         foreach (DataGridItem item in dg.Items)
         {
             foreach (Control c in item.Cells[0].Controls)
                 if (c.GetType() == TypeOf(CheckBox))
                 {
                     CheckBox box = (CheckBox)c;
                     if (box.Checked == true)
                     {
                         //get the checked orderid
                         object _OrderID = dataItem["un_OrderID"].Text;
                     }
                 }
         }
}

errors://

Error      1      The name 'TypeOf' does not exist in the current context      

Error      2      'System.Web.UI.WebControls.CheckBox' is a 'type' but is used like a 'variable'

Error      3      The name 'dataItem' does not exist in the current contet


 <asp:DataGrid ID="dg" runat="server" AllowPaging="True" AllowSorting="True" DataSourceID="AccessDataSource1" OnPageIndexChanged="dg_PageIndexChanged" PageSize="5"
   >
            <Columns>
                <asp:TemplateColumn  HeaderText="ProductName" SortExpression="ProductName">
                    <HeaderTemplate>
                                          
<input type="checkbox" id="checkAll" onclick="CheckAll(this);" runat="server" name="checkAll">
</HeaderTemplate>
<ItemTemplate>
    <!-- <input type="checkbox" runat="server" id="EmpId1" value='<%# Bind("Discontinued") %>' checked=<%# DataBinder.Eval(Container.DataItem, "Discontinued") %> onclick="CheckChanged();" unselectable=off name="EmpId" />&nbsp; -->
    <asp:CheckBox  runat="server"  id="EmpId"  onclick="CheckChanged();"   />
                              </ItemTemplate>
                </asp:TemplateColumn>
               
            </Columns>
     
        </asp:DataGrid></td>
            </tr>
             
            <tr>
                <td style="width: 76px">
        <asp:Button ID="selBtn" OnClick="View_Selected" runat="server" Text="Show Selection" /></td>
w/s :)

One change: In datagrid, use <input type=CheckBox runat=server value='<%#DataBinder.Eval(Container.DataItem,"un_OrderID")%>'> instead of asp:CheckBox. This is needed since asp:CheckBox do not have a value attribute. You can add it on runtime but it is time consuming.

 foreach (DataGridItem item in dg.Items)
         {
             foreach (Control c in item.Cells[0].Controls)
                 if (c.GetType() == typeOf("HtmlInputCheckBox"))
                 {
                     HtmlInputCheckBox box = (HtmlInputCheckBox)c;
                     if (box.Checked == true)
                     {
                         //get the checked orderid
                         object _OrderID = box.Value;
                     }
                 }
         }

--Nauman.

Author

Commented:
>> if (c.GetType() == typeOf("HtmlInputCheckBox"))

error:
Error      1      The name 'typeOf' does not exist in the current context       
woops $$ typeOf should be typeof

--Nauman.

Author

Commented:
i realized after i post but still getting the error
 
What is the error?

--Nauman.

Author

Commented:
Error      1      Type expected       
Error      2      ;  
Error      3      Invalid expression term ')'

      
this is what the code i have, same exact code you have suggested

 foreach (DataGridItem item in dg.Items)
         {
             foreach (Control c in item.Cells[0].Controls)
                 if (c.GetType() == typeof("HtmlInputCheckBox")) <<<<ERROR HERE
                 {
                     HtmlInputCheckBox box = (HtmlInputCheckBox)c;
                     if (box.Checked == true)
                     {
                         //get the checked orderid
                         object _OrderID = box.Value;
                     }
                 }
         }


CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2008

Commented:
              if (c.GetType() == typeof(HtmlInputCheckBox))

Bob
 

Author

Commented:
the error is fixed but again... its reading the checkbox from the current page only and if i go back to previous page then i dont see my checkbox is checked :(
Commented:
PAQed with points refunded (125)

DarthMod
Community Support Moderator

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.