Link to home
Start Free TrialLog in
Avatar of deb_holmes
deb_holmes

asked on

evaluating checkbox in datagrid

I have a datagrid that uses a templatecolumn to display a bit value from the database as a checkbox.  The datagrid has update functionality and the one field that I want people to be able to change is to toggle this checkbox.  However I can't figure out how to get at the value of the checkbox.   Relevant code is in three parts although I preusme the problem is in the third part, where the update  statement is found.
When I click update on a row in the grow, I get this error:

System.InvalidCastException was unhandled by user code
  Message="Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.CheckBox'."
  Source="Webkinz"
  StackTrace:
       at WebKinz.Charms.gridFound_Update(Object source, DataGridCommandEventArgs e) in C:\All\Visual Studio 2005\Webkinz\Webkinz\Charms.aspx.cs:line 126
       at System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArgs e)
       at System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
       at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
       at System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
       at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
       at System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

In the ASPX page, inside the datagrid
<asp:TemplateColumn HeaderText="Have?" SortExpression="found">
                    <ItemTemplate>
                      <asp:CheckBox runat="server" id="chkFound" 
                             Checked='<%#DataBinder.Eval(Container.DataItem,"found") %>'/>
                    </ItemTemplate>
                </asp:TemplateColumn>
 
Code for loading the datagrid. This works fine to properly populate the checkboxes in every row
protected void loadGrids(string account,string sort)
        {
            SqlConnection conn = new SqlConnection(c.getConnectionString());
            conn.Open();
            string queryString = "exec webkinz_charm_forest_all '" + account + "'";
            SqlDataAdapter adpt = new SqlDataAdapter(queryString, conn);
            DataSet ds = new DataSet();
            adpt.Fill(ds);
            gridFound.DataSource = ds;
            gridFound.DataBind();            
            gridFound.VirtualItemCount = 40;
            conn.Close();
        }
 
Also in the .cs file, the udpate statment:
 
        protected void gridFound_Update(object source, DataGridCommandEventArgs e)
        {
            bool b = ((CheckBox)e.Item.Cells[8].Controls[0]).Checked;
            if (b)
            {
                Label1.Text = "TRUE";
            }
            else
            {
                Label1.Text = "FALSE";
            }
{

Open in new window

SOLUTION
Avatar of newbieal
newbieal
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of deb_holmes
deb_holmes

ASKER

I had tried using the FindControl method previously and was getting errors on it too.  Apparently hadn't been putting it in the right place and needed the specific syntax.  This works:
CheckBox chk = (CheckBox)e.Item.Cells[8].FindControl("chkFound");  
Thanks!