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. DataGridCo mmandEvent Args e)
{
DataGridItem item = grdMessages.Items[grdMessa ges.EditIt emIndex];
RequiredFieldValidator lobjEditSubject = (RequiredFieldValidator) item.FindControl("rfvEditS ubject");
RequiredFieldValidator lobjEditMessage = (RequiredFieldValidator) item.FindControl("rfvEditM essage");
// 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(grdMessage s.DataKeys [(int)e.It em.ItemInd ex]);
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(DateTim e.Today);
fobjMessage.UserID = fobjUser.UserID;
// Save the Message object.
fobjMessage.Save();
// Quit in-line-editing mode.
grdMessages.EditItemIndex = -1;
BindMessages(fobjUser.User ID);
}
}
{
DataGridItem item = grdMessages.Items[grdMessa
RequiredFieldValidator lobjEditSubject = (RequiredFieldValidator) item.FindControl("rfvEditS
RequiredFieldValidator lobjEditMessage = (RequiredFieldValidator) item.FindControl("rfvEditM
// 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(grdMessage
string lsSubject;
string lsMessage;
TextBox lobjTextBox;
lobjTextBox = (TextBox)(e.Item.Cells[1].
lsSubject = lobjTextBox.Text;
lobjTextBox = (TextBox)(e.Item.Cells[2].
lsMessage = lobjTextBox.Text;
fobjMessage.EntryDate = Convert.ToDateTime(DateTim
fobjMessage.UserID = fobjUser.UserID;
// Save the Message object.
fobjMessage.Save();
// Quit in-line-editing mode.
grdMessages.EditItemIndex = -1;
BindMessages(fobjUser.User
}
}
How did you declare lobjTextBox ?
ASKER
I declared it as a local object of type TextBox
Can you post the declaration of your datagrid....
ASKER
<asp:datagrid id="grdMessages" runat="server" CssClass="BB_General" Width="650px" AllowPaging="True"
AutoGenerateColumns="False " DataKeyField="MessageID">
<HeaderStyle HorizontalAlign="Center" CssClass="BB_Header"></Hea derStyle>
<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:requiredfieldvalidato r ID="rfvEditSubject" runat="server" ErrorMessage="Subject is required." ControlToValidate="txtEdit Subject"
Display="Dynamic"></asp:re quiredfiel dvalidator >
</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:requiredfieldvalidato r ID="rfvEditMessage" runat="server" ErrorMessage="Message is required." ControlToValidate="txtEdit Message"
Display="Dynamic"></asp:re quiredfiel dvalidator >
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Manage">
<HeaderStyle HorizontalAlign="Center" Width="110px" CssClass="grid-header" VerticalAlign="Middle"></H eaderStyle >
<ItemStyle HorizontalAlign="Right" Width="110px" CssClass="grid-item"></Ite mStyle>
<ItemTemplate>
<asp:LinkButton runat="server" Text="Edit" CommandName="Edit" CausesValidation="False">< /asp:LinkB utton>
<img src="Images/spacer.gif" width="3">
<asp:LinkButton runat="server" Text="Delete" CommandName="Delete" CausesValidation="False">< /asp:LinkB utton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton runat="server" Text="Update" CommandName="Update" CausesValidation="False">< /asp:LinkB utton>&nbs p;
<img src="Images/spacer.gif" width="3">
<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False">< /asp:LinkB utton>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
AutoGenerateColumns="False
<HeaderStyle HorizontalAlign="Center" CssClass="BB_Header"></Hea
<Columns>
<asp:TemplateColumn Visible="False" HeaderText="Message ID">
<ItemTemplate>
<asp:Label ID="lblEditMessageID" runat="server" Text='<%# DataBinder.Eval(Container,
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditMessageID" runat="server" Text='<%# DataBinder.Eval(Container,
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Subject">
<ItemTemplate>
<asp:Label ID="lblEditSubject" runat="server" Text='<%# DataBinder.Eval(Container,
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" ID="txtEditSubject" Text='<%# DataBinder.Eval(Container,
</asp:TextBox>
<asp:requiredfieldvalidato
Display="Dynamic"></asp:re
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Message">
<ItemTemplate>
<asp:Label ID="lblEditMessage" runat="server" Text='<%# DataBinder.Eval(Container,
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" ID="txtEditMessage" Text='<%# DataBinder.Eval(Container,
</asp:TextBox>
<asp:requiredfieldvalidato
Display="Dynamic"></asp:re
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Manage">
<HeaderStyle HorizontalAlign="Center" Width="110px" CssClass="grid-header" VerticalAlign="Middle"></H
<ItemStyle HorizontalAlign="Right" Width="110px" CssClass="grid-item"></Ite
<ItemTemplate>
<asp:LinkButton runat="server" Text="Edit" CommandName="Edit" CausesValidation="False"><
<img src="Images/spacer.gif" width="3">
<asp:LinkButton runat="server" Text="Delete" CommandName="Delete" CausesValidation="False"><
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton runat="server" Text="Update" CommandName="Update" CausesValidation="False"><
<img src="Images/spacer.gif" width="3">
<asp:LinkButton runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="False"><
</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( )
lobjTextBox = (TextBox)(e.Item.Cells[1].
What do you get if you try this ?
e.Item.Cells[1].Controls[0
ASKER
?e.Item.Cells[1].Controls[
{System.RuntimeType}
System.Type: {"System.Web.UI.LiteralCon
_pData: 197075488
Assembly: {System.Reflection.Assembl
AssemblyQualifiedName: "System.Web.UI.LiteralCont
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.LiteralCont
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.LiteralCon
valueType: {"System.ValueType"}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Is your problems solved ? (if so, why only a C-grade ?)
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.