This is a migrated thread and some comments may be shown as answers.

Help retrieving edited value of datakey...value retrieved is original value not edited value.

3 Answers 108 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Matthew
Top achievements
Rank 1
Matthew asked on 28 Apr 2011, 08:33 PM
I use the following method to build a table of all of the current values in a Gridview after any edits may have occured...

private DataTable BuildRenameTableFromGrid()
        {
            int cnt = rgRuleReplace.Items.Count;
            DataTable dt = GetEmptyRenameTable();


            for (int i = 0; i < cnt; i++)
            {
                GridEditableItem editedItem = (GridEditableItem)rgRuleReplace.EditItems[0];
                string val1 = editedItem.OwnerTableView.DataKeyValues[i]["replace_addto"].ToString();
                string val2 = editedItem.OwnerTableView.DataKeyValues[i]["column_name"].ToString();
                string val3 = editedItem.OwnerTableView.DataKeyValues[i]["new_value"].ToString();


                DataRow row;
                row = dt.NewRow();
                row["replace_addto"] = val1;
                row["column_name"] = val2;
                row["new_value"] = val3;
                dt.Rows.Add(row);


            }
            return dt;
        }


Here is the gridview...

 <Telerik:RadGrid ID="rgRuleReplace" runat="server"  
            onitemdatabound="rgRuleReplace_ItemDataBound" 
            EnableLinqExpressions="False" Width="100%" AllowPaging="True" 
            PageSize="10" DataMember="reg_rule_renames" GridLines="None" 
                                    onitemcommand="rgRuleReplace_ItemCommand" 
                                    onprerender="rgRuleReplace_PreRender1"
                                    onneeddatasource="rgRuleReplace_NeedDataSource1" 
                                    EnableViewState="true">
        <MasterTableView DataKeyNames="replace_addto,column_name,new_value" CommandItemDisplay="Top" AutoGenerateColumns="False" HeaderStyle-Height="10px" EditMode="InPlace" DataMember="reg_rule_renames" HeaderStyle-CssClass="gridHeader" AllowAutomaticDeletes="False" AllowAutomaticInserts="False" AllowAutomaticUpdates="False" >
            <Columns>
                <Telerik:GridDropDownColumn UniqueName="replace_addto" DataField="replace_addto" HeaderText="Comparison Item" ListDataMember="replace_addto" ListTextField="replace_addto" ListValueField="replace_addto"/>
                <Telerik:GridDropDownColumn UniqueName="column_name" DataField="column_name" HeaderText="Register Column"  ListDataMember="column_names" ListTextField="column_name" ListValueField="column_name"/>
                <Telerik:GridBoundColumn UniqueName="new_value" DataField="new_value" DataType="System.String" HeaderText="New Value" />
                <%--<Telerik:GridEditCommandColumn ButtonType="LinkButton" EditText="Edit" UniqueName="editbutton" />--%>
                
               


            </Columns>
        </MasterTableView>
        <ClientSettings>
            <Selecting AllowRowSelect="True" />
        </ClientSettings>
    </Telerik:RadGrid>


But regardless of what the value of the edited column is the only value retrieved is the original value of the column before it was edited.  Any ideas what I'm missing?

3 Answers, 1 is accepted

Sort by
0
Matthew
Top achievements
Rank 1
answered on 28 Apr 2011, 09:39 PM
OK I have tried a different approach 

 foreach (GridEditableItem editedItem in rgRuleReplace.EditItems)
            {
                Hashtable newValues = new Hashtable();
                //The GridTableView will fill the values from all editable columns in the hash
                e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);


                string val1 = newValues["replace_addto"].ToString();
                string val2 = newValues["column_name"].ToString();
                string val3 = newValues["new_value"].ToString();


                DataRow row;
                row = dt.NewRow();
                row["replace_addto"] = val1;
                row["column_name"] = val2;
                row["new_value"] = val3;
                dt.Rows.Add(row);


            }

This seems to retrieve the new values that I need but poses a different problem..It only seems to retrieve the values from a single row and I cant seem to figure out how to get this approach to go through every row in the radgrid and retrieve every value from every row...  I have to be able to do this because the whole radgrid item can be edited in any existing row and I need to trap every value of every row in the radgrid when I perform this function..essentially creating a datatable reconstruction of the radgrid capturing the edited values versus the original values.
0
Tsvetoslav
Telerik team
answered on 29 Apr 2011, 12:04 PM
Hello Matthew,

Attached is a small sample that demonstrates how to achieve your requirement.

Hope it helps. 

Best wishes,
Tsvetoslav
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

0
Matthew
Top achievements
Rank 1
answered on 29 Apr 2011, 03:41 PM

 

 

foreach (GridEditableItem editedItem in rgRuleReplace.EditItems)

 

 

{

 

 

 

Hashtable newValues = new Hashtable();

 

 

 

 

//The GridTableView will fill the values from all editable columns in the hash

 

e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);

 

 

string val1 = "";

 

 

 

 

if (newValues["replace_addto"] != null)

 

 

{

 

val1 = newValues[

 

"replace_addto"].ToString();

 

 

}

 

 

 

string val2 = "";

 

 

 

 

if (newValues["column_name"] != null)

 

 

{

 

val2 = newValues[

 

"column_name"].ToString();

 

 

}

 

 

 

string val3 = null;

 

 

 

 

if (newValues["new_value"] != null)

 

 

{

 

val3 = newValues[

 

"new_value"].ToString();

 

 

}

 

 

 

DataRow row;

 

 

row = dt.NewRow();

 

row[

 

"replace_addto"] = val1;

 

 

row[

 

"column_name"] = val2;

 

 

row[

 

"new_value"] = val3;

 

 

dt.Rows.Add(row);

 

}





is the working solution to the problem...it wasnt working earlier because of an issue with multirowedit not being allowed so only one row was being returned.
Tags
Grid
Asked by
Matthew
Top achievements
Rank 1
Answers by
Matthew
Top achievements
Rank 1
Tsvetoslav
Telerik team
Share this question
or