Question

I have an ASP form created using Telerik's RadGrid control, already binding values from the database and displaying them, with the ability to add and delete entries from the table. I need to add editing functionality, but I've finally run into a block, and I can't find a way past it.

The ASP page contains both the RadGrid and the SqlDataSource I need to use:

<asp:SqlDataSource ID="ContactsSqlDataSource" runat="server" 
                   ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
                   SelectCommand="etc..."
                   UpdateCommand="UPDATE Contacts
SET Salutation=@Salutation,
    FirstName=@FirstName,
    etc...
WHERE ClientContactID=@ClientContactID" CancelSelectOnNullParameter="False" 
                   onupdating="ContactsSqlDataSource_Updating">
    <UpdateParameters>
        <asp:Parameter Name="Salutation" Type="String" />
        <asp:Parameter Name="FirstName" Type="String" />
        etc...
        <asp:Parameter Name="ClientContactID" Type="String" />
    </UpdateParameters>
    <SelectParameters>
        <asp:QueryStringParameter Name="GroupID" QueryStringField="ID" />
    </SelectParameters>
</asp:SqlDataSource>
etc...
<telerik:RadGrid ID="ContactsRadGrid" runat="server" 
                 AutoGenerateColumns="False" AutoGenerateDeleteColumn="True" CellSpacing="0" 
                 DataSourceID="ContactsSqlDataSource" GridLines="None" 
                 Skin="Windows7" onitemcommand="ContactsRadGrid_ItemCommand" 
                 onitemdatabound="ContactsRadGrid_ItemDataBound" 
                 AllowAutomaticUpdates="True">
    <MasterTableView DataSourceID="ContactsSqlDataSource" 
                     DataKeyNames="etc...">
        <Columns>
            etc...
        </Columns>
        <EditFormSettings EditFormType="Template">
            <FormTemplate>
                <asp:HiddenField ID="ClientIDHiddenField" runat="server" 
                                 Value='<%# Bind("ClientContactID") %>' />
                etc...
                <asp:TextBox ID="SalutationTextBox" runat="server" Text='<%# Bind("Salutation") %>' TabIndex="1" />
                etc...
                <asp:TextBox ID="FirstNameTextBox" runat="server" Text='<%# Bind("FirstName") %>' TabIndex="2" />
            </FormTemplate>
        </EditFormSettings>
    </MasterTableView>
</telerik:RadGrid>

In my code behind, I have:

protected void ContactsRadGrid_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
{
    RadGrid grid = sender as RadGrid;
    GridDataItem dataItem = e.Item as GridDataItem;
    GridEditFormItem editItem = e.Item as GridEditFormItem;
    if (e.CommandName == "Delete")
    {
        etc...
    }
    else if (e.CommandName == "Update")
    {
        ContactsSqlDataSource.Update();
    }
}

protected void ContactsSqlDataSource_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
    GridEditFormItem editItem = (ContactsRadGrid.EditItems[0] as GridDataItem).EditFormItem;
    string salutation = Convert.ToString(editItem.GetDataKeyValue("Salutation"));
    string firstName = Convert.ToString(editItem.GetDataKeyValue("FirstName"));
    etc...
    string clientContactID = Convert.ToString(editItem.GetDataKeyValue("ClientContactID"));

    e.Command.Parameters["@Salutation"].Value = salutation;
    e.Command.Parameters["@FirstName"].Value = firstName;
    etc...
    e.Command.Parameters["@ClientContactID"].Value = clientContactID;

    e.Command.Connection.Open();
    e.Command.ExecuteNonQuery();
    e.Command.Connection.Close();
}

This is where I finally got to in order to stop getting errors on the SQL execution, however there's one major problem: the values being pushed onto the parameters are the old values, the ones that were already in the database, not the values I've entered in the EditFormItem. If I hardcode something onto a parameter (eg, append ".com" onto email), the alteration is correctly reflected in both the database and the table after the "Save" button in the edit form is clicked. Without the manual edit, no changes occur, because the database is simply being updated with the values that were already present.


How can I get the current values in the edit form?

(I'm not opposed to getting this done in some way other than the DataSource_Updating event, that's just the solution I came up with which was closest to correct. I do need to stick with the RadGrid, though.)

Was it helpful?

Solution

I managed to find a resolution to this issue. In the first part of ContactsSqlDataSource_Updating, I now have:

string salutation = (editItem.FindControl("SalutationTextBox") as TextBox).Text;
string firstName = (editItem.FindControl("FirstNameTextBox") as TextBox).Text;
etc...
string clientContactID = (editItem.FindControl("ClientIDHiddenField") as HiddenField).Value;

The database now updates correctly.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top