Link to home
Start Free TrialLog in
Avatar of soumare
soumare

asked on

Using a DataGrid Web Control to Read and Write Data: I get error message Specified Cast is not valid on line lobjTextBox = (TextBox)(e.Item.Cells[1].Controls[0]);. I am using ASP.NET 1.1

private void grdMessages_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
            {
                  DataGridItem item = grdMessages.Items[grdMessages.EditItemIndex];

                  RequiredFieldValidator lobjEditSubject = (RequiredFieldValidator) item.FindControl("rfvEditSubject");
                  RequiredFieldValidator lobjEditMessage = (RequiredFieldValidator) item.FindControl("rfvEditMessage");
                  
                  
                  // Check for validation, if all valid, update the object to data entered and save it.
                  if (lobjEditSubject.IsValid && lobjEditMessage.IsValid)
                  {      
                        // Fill in properties for Message object.
                        fobjMessage.MessageID = Convert.ToInt32(grdMessages.DataKeys[(int)e.Item.ItemIndex]);
                         

                        string lsSubject;
                        string lsMessage;
                        TextBox lobjTextBox;
                        lobjTextBox = (TextBox)(e.Item.Cells[1].Controls[0]);
                        lsSubject = lobjTextBox.Text;
                        lobjTextBox = (TextBox)(e.Item.Cells[2].Controls[0]);
                        lsMessage = lobjTextBox.Text;

                        fobjMessage.EntryDate = Convert.ToDateTime(DateTime.Today);
                        fobjMessage.UserID = fobjUser.UserID;

                        // Save the Message object.
                        fobjMessage.Save();

                        // Quit in-line-editing mode.
                        grdMessages.EditItemIndex = -1;
                        BindMessages(fobjUser.UserID);
                  }
            }
Avatar of Dirk Haest
Dirk Haest
Flag of Belgium image

How did you declare lobjTextBox  ?
Avatar of soumare
soumare

ASKER

I declared it as a local object of type TextBox
Can you post the declaration of your datagrid....
Avatar of soumare

ASKER

<asp:datagrid id="grdMessages" runat="server" CssClass="BB_General" Width="650px" AllowPaging="True"
                                                AutoGenerateColumns="False" DataKeyField="MessageID">
                                                <HeaderStyle HorizontalAlign="Center" CssClass="BB_Header"></HeaderStyle>
                                                <Columns>
                                                      <asp:TemplateColumn Visible="False" HeaderText="Message ID">
                                                            <ItemTemplate>
                                                                  <asp:Label ID="lblEditMessageID" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.MessageID") %>'>
                                                                  </asp:Label>
                                                            </ItemTemplate>
                                                            <EditItemTemplate>
                                                                  <asp:TextBox ID="txtEditMessageID" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.MessageID") %>'>
                                                                  </asp:TextBox>
                                                            </EditItemTemplate>
                                                      </asp:TemplateColumn>
                                                      <asp:TemplateColumn HeaderText="Subject">
                                                            <ItemTemplate>
                                                                  <asp:Label ID="lblEditSubject" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Subject") %>' Width="150">
                                                                  </asp:Label>
                                                            </ItemTemplate>
                                                            <EditItemTemplate>
                                                                  <asp:TextBox runat="server" ID="txtEditSubject" Text='<%# DataBinder.Eval(Container, "DataItem.Subject") %>' Width="150">
                                                                  </asp:TextBox>
                                                                  <asp:requiredfieldvalidator ID="rfvEditSubject" runat="server" ErrorMessage="Subject is required." ControlToValidate="txtEditSubject"
                                                                        Display="Dynamic"></asp:requiredfieldvalidator>
                                                            </EditItemTemplate>
                                                      </asp:TemplateColumn>
                                                      <asp:TemplateColumn HeaderText="Message">
                                                            <ItemTemplate>
                                                                  <asp:Label ID="lblEditMessage" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Message") %>' Width="355">
                                                                  </asp:Label>
                                                            </ItemTemplate>
                                                            <EditItemTemplate>
                                                                  <asp:TextBox runat="server" ID="txtEditMessage" Text='<%# DataBinder.Eval(Container, "DataItem.Message") %>' Width="355">
                                                                  </asp:TextBox>
                                                                  <asp:requiredfieldvalidator ID="rfvEditMessage" runat="server" ErrorMessage="Message is required." ControlToValidate="txtEditMessage"
                                                                        Display="Dynamic"></asp:requiredfieldvalidator>
                                                            </EditItemTemplate>
                                                      </asp:TemplateColumn>
                                                      <asp:TemplateColumn HeaderText="Manage">
                                                            <HeaderStyle HorizontalAlign="Center" Width="110px" CssClass="grid-header" VerticalAlign="Middle"></HeaderStyle>
                                                            <ItemStyle HorizontalAlign="Right" Width="110px" CssClass="grid-item"></ItemStyle>
                                                            <ItemTemplate>
                                                                  <asp:LinkButton runat="server" Text="Edit" CommandName="Edit" CausesValidation="False"></asp:LinkButton>
                                                                  <img src="Images/spacer.gif" width="3">
                                                                  <asp:LinkButton runat="server" Text="Delete" CommandName="Delete" CausesValidation="False"></asp:LinkButton>
                                                            </ItemTemplate>
                                                            <EditItemTemplate>
                                                                  <asp:LinkButton runat="server" Text="Update" CommandName="Update" CausesValidation="False"></asp:LinkButton>&nbsp;
                                                                  <img src="Images/spacer.gif" width="3">
                                                                  <asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False"></asp:LinkButton>
                                                            </EditItemTemplate>
                                                      </asp:TemplateColumn>
                                                </Columns>
                                          </asp:datagrid>
If you break your code on
lobjTextBox = (TextBox)(e.Item.Cells[1].Controls[0]);

What do you get if you try this ?
e.Item.Cells[1].Controls[0].GetType()
Avatar of soumare

ASKER


?e.Item.Cells[1].Controls[0].GetType()
{System.RuntimeType}
    System.Type: {"System.Web.UI.LiteralControl"}
    _pData: 197075488
    Assembly: {System.Reflection.Assembly}
    AssemblyQualifiedName: "System.Web.UI.LiteralControl, System.Web, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    BaseType: {"System.Web.UI.Control"}
    BinderAccessMask: 65280
    BinderGetSetField: 3072
    BinderGetSetProperty: 12288
    BinderNonCreateInstance: 15616
    BinderNonFieldGetSet: 16773888
    BinderSetInvokeField: 2304
    BinderSetInvokeProperty: 8448
    ClassicBindingMask: 61696
    DeclaringType: <undefined value>
    DISPIDName: "[DISPID"
    ForwardCallBinder: {System.OleAutBinder}
    FullName: "System.Web.UI.LiteralControl"
    GUID: {System.Guid}
    LookupMask: 255
    MemberType: TypeInfo
    Module: {System.Reflection.Module}
    Name: "LiteralControl"
    Namespace: "System.Web.UI"
    ReflectedType: <undefined value>
    s_ForwardCallBinder: {System.OleAutBinder}
    TypeHandle: {System.RuntimeTypeHandle}
    UnderlyingSystemType: {"System.Web.UI.LiteralControl"}
    valueType: {"System.ValueType"}
ASKER CERTIFIED SOLUTION
Avatar of Dirk Haest
Dirk Haest
Flag of Belgium 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
Is your problems solved ? (if so, why only a C-grade ?)
Avatar of soumare

ASKER

No I did not take your solution.  The real problem was that the update I was doing was working but I was calling the databinding to the grid again on postback that's why the grid values were being overwritten by the old database values.  That was my main problem,  I had to google it to find the solution.  Plus it took you too long to answer to my questions.