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

how to find datakeyvalues while in item command

2 Answers 276 Views
Grid
This is a migrated thread and some comments may be shown as answers.
areen
Top achievements
Rank 1
areen asked on 23 May 2011, 07:37 PM
Hi,

i'm trying to modify the confirmtext value of a gridbuttoncolum. i'm making the change during the first firing of itemcreated event on the page.

on the oninsertcommand, onupdatecommand, etc of the radgrid i've used
string strChannelId = RadGrid1.MasterTableView.DataKeyValues[e.Item.ItemIndex]["ChannelId"].ToString();

to retrieve the datakey value.

i'm not having much luck using it in this event to get the value as datakeyvalues appears to be unavailable. how can i get this value from the itemcreated command?

here's my code in more detail.
protected void RadGrid1_ItemCreated(object source, GridItemEventArgs e)
{
    if (e.Item is GridEditFormInsertItem && e.Item.IsInEditMode)
    {
        this.RadGrid1_ItemCreatedInsert(source, e);
    }
    else if (e.Item is GridEditFormItem && e.Item.IsInEditMode)
    {
        this.RadGrid1_ItemCreatedUpdate(source, e);
    }
    else
    {
        foreach (GridColumn gridColumn in RadGrid1.MasterTableView.Columns)
        {
            if (gridColumn.UniqueName == "columnRelease")
            {
                // retrieve the original values from the database
                DataSet dsOriginal = new DataSet();
                string strErrorText = string.Empty;
                string strChannelId = RadGrid1.MasterTableView.DataKeyValues[e.Item.ItemIndex]["ChannelId"].ToString();
 
                this.GetChannelDetail(out dsOriginal, out strErrorText, strChannelId);
                DataTable dtOriginal = dsOriginal.Tables["Channel"];
                DataRow drOriginal = dtOriginal.Rows[0];
 
                (gridColumn as GridButtonColumn).ConfirmText = string.Format("Are you sure you want to release channel {0} on FMIS Server {1}?", Convert.ToString(drOriginal.ItemArray[2]), Convert.ToString(drOriginal.ItemArray[1]));
            }
        }
    }
}

2 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 24 May 2011, 05:38 AM
Hello Areen,

 You cannot access DataKeyValues in ItemCreated, because it is fired before the item is data-bound. So no data exists in the cells' text or input controls. Data is available only in ItemDataBound. Try the same code in ItemDataBound.

C#:
protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
    {
     foreach (GridColumn gridColumn in RadGrid1.MasterTableView.Columns)
         {
           if (gridColumn.UniqueName =="columnRelease")
           {
              DataSet dsOriginal = new DataSet();
              string strErrorText = string.Empty;
              string strChannelId = RadGrid1.MasterTableView.DataKeyValues[e.Item.ItemIndex]["ChannelId"].ToString();
              DataTable dtOriginal = dsOriginal.Tables["Channel"];
              DataRow drOriginal = dtOriginal.Rows[0];
              (gridColumn as GridButtonColumn).ConfirmText = string.Format("Are you sure you want to release channel {0} on FMIS Server {1}?", Convert.ToString(drOriginal.ItemArray[2]), Convert.ToString(drOriginal.ItemArray[1]));
           }
          }
   }

Thanks,
Princy.
0
areen
Top achievements
Rank 1
answered on 24 May 2011, 08:04 AM
thanks, princy. I did as you suggested and moved my code into the ItemDataBound event and modified my data reference a bit. please reveiw.

however, i'm having a strange issue. My code is executing fine, but when i click the release button to execute the confirmtext function, the string in the confirmtext value is in the wrong place. the text for each channelid should correspond to the channel id for the dataitem. instead the text is off by one. for example: the text in the first release button has some default text but should display channel 1 fmis server 1.1.1.1. instead i get my default text. the second release button on the page should display channel 2 fmis server 1.1.1.2. instead i get a msgbox that has the confirmtext channel 1 fmis server 1.1.1.1.

where am i going wrong?

protected void RadGrid1_ItemDataBound(object source, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        // retrieve the original values from the database
        DataSet dsOriginal = new DataSet();
        string strErrorText = string.Empty;
 
        GridDataItem dataItem = (GridDataItem)e.Item;
        string strChannelId = dataItem.GetDataKeyValue("ChannelId").ToString(); // RadGrid1.MasterTableView.DataKeyValues[e.Item.ItemIndex]["ChannelId"].ToString();
 
        this.GetChannelDetail(out dsOriginal, out strErrorText, strChannelId);
        DataTable dtOriginal = dsOriginal.Tables["Channel"];
        DataRow drOriginal = dtOriginal.Rows[0];
 
        GridColumn gridColumn = (GridColumn)dataItem.OwnerTableView.Columns.FindByUniqueName("columnRelease");
        (gridColumn as GridButtonColumn).ConfirmText = string.Format("Are you sure you want to release channel {0} on FMIS Server {1}?", Convert.ToString(drOriginal.ItemArray[2]), Convert.ToString(drOriginal.ItemArray[1]));
    }
}
Tags
Grid
Asked by
areen
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
areen
Top achievements
Rank 1
Share this question
or