10 Answers, 1 is accepted
I guess you want two image buttons in each row , which moves the rows up and down.Please try the below code snippet to move a row up and down on the image button click.
ASPX:
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
AllowPaging
=
"true"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
>
<
MasterTableView
DataKeyNames
=
"OrderID"
>
<
Columns
>
<
telerik:GridBoundColumn
UniqueName
=
"OrderID"
DataField
=
"OrderID"
HeaderText
=
"OrderID"
/>
<
telerik:GridBoundColumn
DataField
=
"ShipCity"
HeaderText
=
"ShipCity"
UniqueName
=
"ShipCity"
/>
<
telerik:GridTemplateColumn
>
<
ItemTemplate
>
<
asp:ImageButton
ID
=
"Upbtn"
runat
=
"server"
OnClick
=
"Upbtn_Click"
ImageUrl
=
"~/RadGrid7/up.jpg"
/>
<
asp:ImageButton
ID
=
"Downbtn"
runat
=
"server"
OnClick
=
"Downbtn_Click"
ImageUrl
=
"~/RadGrid7/down.jpg"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
C#:
protected
void
RadGrid1_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource =
this
.DataSource;
}
public
DataTable DataSource
{
get
{
object
res =
this
.Session[
"_ds"
];
if
(res ==
null
)
{
string
selectQuery1 =
"select top 10 OrderID,ShipCity from Orders"
;
SqlDataAdapter adapter1 =
new
SqlDataAdapter(selectQuery1, conn);
DataTable dt1 =
new
DataTable();
conn.Open();
adapter1.Fill(dt1);
conn.Close();
RadGrid1.DataSource = dt1;
this
.Session[
"_ds"
] = dt1;
}
return
(DataTable)
this
.Session[
"_ds"
];
}
}
protected
void
Upbtn_Click(
object
sender, EventArgs e)
{
ImageButton upbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)upbtn.NamingContainer;
int
index = item.ItemIndex;
GridItem movedItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index]
as
GridItem);
GridItem beforeItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index-1]
as
GridItem);
object
key1 = RadGrid1.MasterTableView.DataKeyValues[index][
"OrderID"
];
object
key2 = RadGrid1.MasterTableView.DataKeyValues[index - 1][
"OrderID"
];
DataRow row1 =
this
.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key1.ToString()))[0];
DataRow row2 =
this
.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key2.ToString()))[0];
row1.BeginEdit();
row2.BeginEdit();
row2[
"OrderID"
] = key1;
row1[
"OrderID"
] = key2;
row1.EndEdit();
row2.EndEdit();
row1.AcceptChanges();
row2.AcceptChanges();
RadGrid1.Rebind();
}
protected
void
Downbtn_Click(
object
sender, EventArgs e)
{
ImageButton downbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)downbtn.NamingContainer;
int
index = item.ItemIndex;
GridItem movedItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index]
as
GridItem);
GridItem afterItem= ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index + 1]
as
GridItem);
object
key1 = RadGrid1.MasterTableView.DataKeyValues[index][
"OrderID"
];
object
key2 = RadGrid1.MasterTableView.DataKeyValues[index + 1][
"OrderID"
];
DataRow row1 =
this
.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key1.ToString()))[0];
DataRow row2 =
this
.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key2.ToString()))[0];
row1.BeginEdit();
row2.BeginEdit();
row2[
"OrderID"
] = key1;
row1[
"OrderID"
] = key2;
row1.EndEdit();
row2.EndEdit();
row1.AcceptChanges();
row2.AcceptChanges();
RadGrid1.Rebind();
}
Thanks,
Princy
I guess you are creating the entire grid programmatically,please try the below code snippet.
ASPX:
<
asp:PlaceHolder
ID
=
"PlaceHolder1"
runat
=
"server"
></
asp:PlaceHolder
>
C#:
public
partial
class
RadGrid7_DynamicTemplate : System.Web.UI.Page
{
RadGrid grid;
public
static
string
connection = WebConfigurationManager.ConnectionStrings[
"Northwind_newConnectionString3"
].ConnectionString;
SqlConnection conn =
new
SqlConnection(connection);
public
SqlCommand SqlCommand =
new
SqlCommand();
public
DataTable DataSource
{
get
{
object
res =
this
.Session[
"_ds"
];
if
(res ==
null
)
{
string
selectQuery1 =
"select top 10 OrderID,ShipCity from Orders"
;
SqlDataAdapter adapter1 =
new
SqlDataAdapter(selectQuery1, conn);
DataTable dt1 =
new
DataTable();
conn.Open();
adapter1.Fill(dt1);
conn.Close();
grid.DataSource = dt1;
this
.Session[
"_ds"
] = dt1;
}
return
(DataTable)
this
.Session[
"_ds"
];
}
}
protected
void
grid_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
RadGrid RadGrid1 = (RadGrid)sender;
RadGrid1.DataSource =
this
.DataSource;
}
protected
void
Page_Init(
object
sender, EventArgs e)
{
//Creating the RadGrid
grid =
new
RadGrid();
grid.AutoGenerateColumns =
false
;
grid.ID =
"RadGrid1"
;
grid.AllowPaging =
true
;
grid.PageSize = 8;
grid.Skin =
"Outlook"
;
grid.MasterTableView.DataKeyNames =
new
string
[] {
"OrderID"
};
grid.NeedDataSource +=
new
GridNeedDataSourceEventHandler(grid_NeedDataSource);
grid.ItemCommand +=
new
GridCommandEventHandler(grid_ItemCommand);
// Adding a bound Column
GridBoundColumn boundColumn1 =
new
GridBoundColumn();
grid.MasterTableView.Columns.Add(boundColumn1);
boundColumn1.DataField =
"OrderID"
;
boundColumn1.UniqueName =
"OrderID"
;
boundColumn1.HeaderText =
"OrderID"
;
//Adding a Template Column
string
templateColumnName =
"TemplateColumn"
;
GridTemplateColumn templateColumn =
new
GridTemplateColumn();
grid.MasterTableView.Columns.Add(templateColumn);
templateColumn.ItemTemplate =
new
MyTemplate(templateColumnName);
templateColumn.HeaderText = templateColumnName;
PlaceHolder1.Controls.Add(grid);
}
private
class
MyTemplate : ITemplate
{
private
RadGrid7_DynamicTemplate _DynamicTemplte =
new
RadGrid7_DynamicTemplate();
//Making Parent Class to be accessible in child class
protected
ImageButton upbtn,downbtn;
private
string
colname;
public
MyTemplate(
string
cName)
{
colname = cName;
}
public
void
InstantiateIn(System.Web.UI.Control container)
{
//Adding up button
upbtn =
new
ImageButton();
upbtn.ID =
"upbtn"
;
upbtn.ImageUrl =
"~/RadGrid7/up.jpg"
;
upbtn.CommandName =
"up"
;
upbtn.Height = Unit.Pixel(24);
upbtn.Click +=
new
ImageClickEventHandler(upbtn_Click);
container.Controls.Add(upbtn);
//Adding Down button
downbtn =
new
ImageButton();
downbtn.ID =
"downbtn"
;
downbtn.ImageUrl =
"~/RadGrid7/down.jpg"
;
downbtn.CommandName =
"down"
;
downbtn.Click+=
new
ImageClickEventHandler(downbtn_Click);
container.Controls.Add(downbtn);
}
void
upbtn_Click(
object
sender, ImageClickEventArgs e)
{
ImageButton upbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)upbtn.NamingContainer;
RadGrid RadGrid1 = (RadGrid)item.Parent.Parent.BindingContainer;
int
index = item.ItemIndex;
GridItem movedItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index]
as
GridItem);
GridItem beforeItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index - 1]
as
GridItem);
object
key1 = RadGrid1.MasterTableView.DataKeyValues[index][
"OrderID"
];
object
key2 = RadGrid1.MasterTableView.DataKeyValues[index - 1][
"OrderID"
];
DataRow row1 = _DynamicTemplte.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key1.ToString()))[0];
DataRow row2 = _DynamicTemplte.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key2.ToString()))[0];
row1.BeginEdit();
row2.BeginEdit();
row2[
"OrderID"
] = key1;
row1[
"OrderID"
] = key2;
row1.EndEdit();
row2.EndEdit();
row1.AcceptChanges();
row2.AcceptChanges();
RadGrid1.Rebind();
}
void
downbtn_Click(
object
sender, ImageClickEventArgs e)
{
ImageButton downbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)downbtn.NamingContainer;
RadGrid RadGrid1 = (RadGrid)item.Parent.Parent.BindingContainer;
int
index = item.ItemIndex;
GridItem movedItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index]
as
GridItem);
GridItem afterItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index + 1]
as
GridItem);
object
key1 = RadGrid1.MasterTableView.DataKeyValues[index][
"OrderID"
];
object
key2 = RadGrid1.MasterTableView.DataKeyValues[index + 1][
"OrderID"
];
DataRow row1 = _DynamicTemplte.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key1.ToString()))[0];
DataRow row2 = _DynamicTemplte.DataSource.Select(String.Format(
"OrderID = '{0}'"
, key2.ToString()))[0];
row1.BeginEdit();
row2.BeginEdit();
row2[
"OrderID"
] = key1;
row1[
"OrderID"
] = key2;
row1.EndEdit();
row2.EndEdit();
row1.AcceptChanges();
row2.AcceptChanges();
RadGrid1.Rebind();
}
}
}
}
Thanks,
Princy
Hello,
The first solution fits my situation and works precisely in code-behind, but reflects no changes on front-end. I googled and some references mentioned to to use NeedDataSource and set the data source of the radGrid to null and then rebind. Tried that as well, but no luck.. and client side errors either.. Like I said everything work precisely in code-behind...
Any clue what could be the root cause for this?
Can you please share your page markup as well as the related code behind and also let us know what the exact client errors you are facing are? Thus we can revise the information locally and advise you further.
Regards,
Maria Ilieva
Telerik
Hi Maria,
Thank you for getting back to me. Here is the markup and code-behind:
<telerik:RadGrid runat="server" ID="RadGrid1" AutoGenerateColumns="False" AllowPaging="True" EnableLinqExpressions="False"
OnNeedDataSource="RadGrid1_NeedDataSource" OnUpdateCommand="RadGrid1_UpdateCommand"
OnItemCreated="RadGrid1_ItemCreated" OnDeleteCommand="RadGrid1_DeleteCommand" OnInsertCommand="RadGrid1_InsertCommand" >
<GroupingSettings CaseSensitive="false" />
<MasterTableView DataKeyNames="AnnouncementId,LanguageID,ListOrder" CommandItemDisplay="Top" CommandItemSettings-ShowRefreshButton="true" >
<Columns>
<telerik:GridEditCommandColumn ButtonType="ImageButton" HeaderStyle-BorderStyle="None" HeaderStyle-Width="20px" HeaderStyle-Height="8px" ItemStyle-Height="8px" HeaderStyle-CssClass="radGridManageButton" ItemStyle-CssClass="radGridManageButton" />
<telerik:GridButtonColumn ConfirmText="Delete this announcement?" ConfirmDialogType="RadWindow"
ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" HeaderStyle-BorderStyle="None"
HeaderStyle-Width="20px" HeaderStyle-Height="8px" ItemStyle-Height="8px"
HeaderStyle-CssClass="radGridManageButton" ItemStyle-CssClass="radGridManageButton" />
<telerik:GridBoundColumn DataField="AnnouncementId" HeaderText="Announcement ID" ReadOnly="true"
ForceExtractValue="Always" ConvertEmptyStringToNull="true" AllowFiltering="false" AllowSorting="false"
ItemStyle-CssClass="displayNone" HeaderStyle-CssClass="displayNone" Display="false"/>
<telerik:GridBoundColumn DataField="Headline" HeaderText="Head Line" ItemStyle-Width="200px" HeaderStyle-Width="200px" FilterControlWidth="90" />
<telerik:GridBoundColumn DataField="BodyText" HeaderText="Body Text" ItemStyle-Width="200px" HeaderStyle-Width="200px" FilterControlWidth="90" />
<telerik:GridBoundColumn DataField="StartDate" HeaderText="Start Date" DataType="System.DateTime" DataFormatString="{0:d}" HeaderStyle-Width="150px" FilterControlWidth="90"/>
<telerik:GridBoundColumn DataField="EndDate" HeaderText="End Date" DataType="System.DateTime" DataFormatString="{0:d}" HeaderStyle-Width="150px" FilterControlWidth="90"/>
<telerik:GridBoundColumn DataField="IsActive" HeaderText="Active" AllowFiltering="false" AllowSorting="false" HeaderStyle-Width="50px"/>
<telerik:GridBoundColumn DataField="AnnouncementDetails" HeaderText="Type" AllowFiltering="false" AllowSorting="false" HeaderStyle-HorizontalAlign="Center"
HeaderStyle-Width="80px"/>
<telerik:GridBoundColumn DataField="LanguageID" HeaderText="LanguageID" AllowFiltering="false" AllowSorting="false" HeaderStyle-Width="50px" Display="false"/>
<telerik:GridBoundColumn DataField="ListOrder" HeaderText="ListOrder" AllowFiltering="false" AllowSorting="false" HeaderStyle-Width="50px" Display="false"/>
<telerik:GridTemplateColumn HeaderText="Language" AllowFiltering="false" AllowSorting="false" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="150px" FilterControlWidth="90">
<ItemTemplate>
<asp:Label runat="server" ID="lbl_Language" Text='<%# Enum.GetName(typeof(BuyerPortal.Common.enumLanguage), (int)Eval("LanguageID")).ToString() %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Re-Order" AllowFiltering="false" AllowSorting="false" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="80px">
<ItemTemplate>
<div class="moveRowButtons">
<asp:ImageButton ID="Upbtn" runat="server" OnClick="Upbtn_Click" ImageUrl="~/Admin/Skins/Silk/images/up.png" Width="10" Height="10" ListOrder='<%#Eval("ListOrder").ToString() %>' LanguageID='<%#Eval("LanguageID").ToString() %>' announcementid='<%#Eval("announcementid").ToString() %>' CssClass="upButton" ToolTip="move row up" />
<asp:ImageButton ID="Downbtn" runat="server" OnClick="Downbtn_Click" ImageUrl="~/Admin/Skins/Silk/images/down.png" Width="10" Height="10" ListOrder='<%#Eval("ListOrder").ToString() %>' LanguageID='<%#Eval("LanguageID").ToString() %>' announcementid='<%#Eval("announcementid").ToString() %>' CssClass="downButton" ToolTip="move row down"/>
</div>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
<PagerStyle Mode="NextPrevAndNumeric" />
</telerik:RadGrid>
//--------------------
//*** Codebehind
//--------------------
public DataTable DataSource
{
get
{
//list_announcement = db.GetAnnouncementsList(0, 1, out totalCount);
//if (dtAnnouncements == null)
dtAnnouncements = db.GetAnnouncementsTable(0, 1, out totalCount);
return dtAnnouncements;
}
}
#region ragGridEvents
protected void Rebind(object sender, CommandEventArgs e)
{
//list_announcement = db.GetAnnouncementsList(0, 1, out totalCount);
//RadGrid1.DataSource = list_announcement;
RadGrid1.DataSource = this.DataSource;
}
protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource = null;
RadGrid1.DataSource = this.DataSource;
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "script_managemoveRowButtons", script_managemoveRowButtons, true);
}
private void SetupInputManager(GridEditableItem editableItem)
{
try
{
}
catch (System.Exception ex)
{
}
}
protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
{
if (e.Item is GridEditableItem && (e.Item.IsInEditMode))
{
GridEditableItem editableItem = (GridEditableItem)e.Item;
SetupInputManager(editableItem);
}
}
protected void RadGrid1_InsertCommand(object source, GridCommandEventArgs e)
{
try
{
string strCommand = e.CommandName.ToString();
AddUpdate(e);
}
catch (System.Exception ex)
{
}
}
protected void RadGrid1_UpdateCommand(object source, GridCommandEventArgs e)
{
try
{
string strCommand = e.CommandName.ToString();
AddUpdate(e);
}
catch (System.Exception ex)
{
}
}
protected void RadGrid1_DeleteCommand(object source, GridCommandEventArgs e)
{
try
{
string strCommand = e.CommandName.ToString();
}
catch (System.Exception ex)
{
}
}
#endregion
#region moveRows
protected void Upbtn_Click(object sender, EventArgs e)
{
ImageButton upbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)upbtn.NamingContainer;
saveRowOrder(item.ItemIndex, "UP");
}
protected void Downbtn_Click(object sender, EventArgs e)
{
ImageButton downbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)downbtn.NamingContainer;
saveRowOrder(item.ItemIndex, "DOWN");
}
public void saveRowOrder(int currentIndex, string action)
{
int index = currentIndex;
string rowAAnnouncementId = "", rowAListOrder = "", rowBAnnouncementId = "", rowBListOrder = "";
if (action.Equals("DOWN"))
index++;
else
index--;
GridItem movedItem = ((RadGrid1.MasterTableView.Controls[0] as Table).Rows[currentIndex] as GridItem);
GridItem afterItem = ((RadGrid1.MasterTableView.Controls[0] as Table).Rows[index] as GridItem);
string key1 = RadGrid1.MasterTableView.DataKeyValues[currentIndex]["ListOrder"].ToString();
string key2 = RadGrid1.MasterTableView.DataKeyValues[index]["ListOrder"].ToString();
int key1Lang = Convert.ToInt32(RadGrid1.MasterTableView.DataKeyValues[currentIndex]["LanguageID"].ToString());
int key2Lang = Convert.ToInt32(RadGrid1.MasterTableView.DataKeyValues[currentIndex]["LanguageID"].ToString());
if (key1Lang != key2Lang)
{
DataRow row1 = this.DataSource.Select(String.Format("ListOrder = '{0}' AND LanguageID = '{1}'", key1, key1Lang.ToString()))[0];
DataRow row2 = this.DataSource.Select(String.Format("ListOrder = '{0}' AND LanguageID = '{1}'", key1, key1Lang.ToString()))[0];
//above line throws an error.
// i'm trying to move last record from page1 to page2
//Error:
// Index was out of range. Must be non-negative and less than the size of the collection.
// Parameter name: index
//**Values:
// currentIndex=9
// index=10
rowAAnnouncementId = row1["AnnouncementId"].ToString();
rowAListOrder= row1["ListOrder"].ToStringNullEmpty();
rowBAnnouncementId = row2["AnnouncementId"].ToStringNullEmpty();
rowBListOrder = row2["ListOrder"].ToStringNullEmpty();
db.AnnouncementsRowOrderUpdate(rowAAnnouncementId, rowBListOrder,
rowBAnnouncementId, rowAListOrder);
}
}
#endregion
​
Hope this is more readable:
<
telerik:RadGrid
runat
=
"server"
ID
=
"RadGrid1"
AutoGenerateColumns
=
"False"
AllowPaging
=
"True"
EnableLinqExpressions
=
"False"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
OnUpdateCommand
=
"RadGrid1_UpdateCommand"
OnItemCreated
=
"RadGrid1_ItemCreated"
OnDeleteCommand
=
"RadGrid1_DeleteCommand"
OnInsertCommand
=
"RadGrid1_InsertCommand"
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
<
MasterTableView
DataKeyNames
=
"AnnouncementId,LanguageID,ListOrder"
CommandItemDisplay
=
"Top"
CommandItemSettings-ShowRefreshButton
=
"true"
>
<
Columns
>
<
telerik:GridEditCommandColumn
ButtonType
=
"ImageButton"
HeaderStyle-BorderStyle
=
"None"
HeaderStyle-Width
=
"20px"
HeaderStyle-Height
=
"8px"
ItemStyle-Height
=
"8px"
HeaderStyle-CssClass
=
"radGridManageButton"
ItemStyle-CssClass
=
"radGridManageButton"
/>
<
telerik:GridButtonColumn
ConfirmText
=
"Delete this announcement?"
ConfirmDialogType
=
"RadWindow"
ConfirmTitle
=
"Delete"
ButtonType
=
"ImageButton"
CommandName
=
"Delete"
HeaderStyle-BorderStyle
=
"None"
HeaderStyle-Width
=
"20px"
HeaderStyle-Height
=
"8px"
ItemStyle-Height
=
"8px"
HeaderStyle-CssClass
=
"radGridManageButton"
ItemStyle-CssClass
=
"radGridManageButton"
/>
<
telerik:GridBoundColumn
DataField
=
"AnnouncementId"
HeaderText
=
"Announcement ID"
ReadOnly
=
"true"
ForceExtractValue
=
"Always"
ConvertEmptyStringToNull
=
"true"
AllowFiltering
=
"false"
AllowSorting
=
"false"
ItemStyle-CssClass
=
"displayNone"
HeaderStyle-CssClass
=
"displayNone"
Display
=
"false"
/>
<
telerik:GridBoundColumn
DataField
=
"Headline"
HeaderText
=
"Head Line"
ItemStyle-Width
=
"200px"
HeaderStyle-Width
=
"200px"
FilterControlWidth
=
"90"
/>
<
telerik:GridBoundColumn
DataField
=
"BodyText"
HeaderText
=
"Body Text"
ItemStyle-Width
=
"200px"
HeaderStyle-Width
=
"200px"
FilterControlWidth
=
"90"
/>
<
telerik:GridBoundColumn
DataField
=
"StartDate"
HeaderText
=
"Start Date"
DataType
=
"System.DateTime"
DataFormatString
=
"{0:d}"
HeaderStyle-Width
=
"150px"
FilterControlWidth
=
"90"
/>
<
telerik:GridBoundColumn
DataField
=
"EndDate"
HeaderText
=
"End Date"
DataType
=
"System.DateTime"
DataFormatString
=
"{0:d}"
HeaderStyle-Width
=
"150px"
FilterControlWidth
=
"90"
/>
<
telerik:GridBoundColumn
DataField
=
"IsActive"
HeaderText
=
"Active"
AllowFiltering
=
"false"
AllowSorting
=
"false"
HeaderStyle-Width
=
"50px"
/>
<
telerik:GridBoundColumn
DataField
=
"AnnouncementDetails"
HeaderText
=
"Type"
AllowFiltering
=
"false"
AllowSorting
=
"false"
HeaderStyle-HorizontalAlign
=
"Center"
HeaderStyle-Width
=
"80px"
/>
<
telerik:GridBoundColumn
DataField
=
"LanguageID"
HeaderText
=
"LanguageID"
AllowFiltering
=
"false"
AllowSorting
=
"false"
HeaderStyle-Width
=
"50px"
Display
=
"false"
/>
<
telerik:GridBoundColumn
DataField
=
"ListOrder"
HeaderText
=
"ListOrder"
AllowFiltering
=
"false"
AllowSorting
=
"false"
HeaderStyle-Width
=
"50px"
Display
=
"false"
/>
<
telerik:GridTemplateColumn
HeaderText
=
"Language"
AllowFiltering
=
"false"
AllowSorting
=
"false"
ItemStyle-HorizontalAlign
=
"Center"
HeaderStyle-Width
=
"150px"
FilterControlWidth
=
"90"
>
<
ItemTemplate
>
<
asp:Label
runat
=
"server"
ID
=
"lbl_Language"
Text='<%# Enum.GetName(typeof(BuyerPortal.Common.enumLanguage), (int)Eval("LanguageID")).ToString() %>' />
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Re-Order"
AllowFiltering
=
"false"
AllowSorting
=
"false"
ItemStyle-HorizontalAlign
=
"Center"
HeaderStyle-Width
=
"80px"
>
<
ItemTemplate
>
<
div
class
=
"moveRowButtons"
>
<
asp:ImageButton
ID
=
"Upbtn"
runat
=
"server"
OnClick
=
"Upbtn_Click"
ImageUrl
=
"~/Admin/Skins/Silk/images/up.png"
Width
=
"10"
Height
=
"10"
ListOrder='<%#Eval("ListOrder").ToString() %>' LanguageID='<%#Eval("LanguageID").ToString() %>' announcementid='<%#Eval("announcementid").ToString() %>' CssClass="upButton" ToolTip="move row up" />
<
asp:ImageButton
ID
=
"Downbtn"
runat
=
"server"
OnClick
=
"Downbtn_Click"
ImageUrl
=
"~/Admin/Skins/Silk/images/down.png"
Width
=
"10"
Height
=
"10"
ListOrder='<%#Eval("ListOrder").ToString() %>' LanguageID='<%#Eval("LanguageID").ToString() %>' announcementid='<%#Eval("announcementid").ToString() %>' CssClass="downButton" ToolTip="move row down"/>
</
div
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
MasterTableView
>
<
PagerStyle
Mode
=
"NextPrevAndNumeric"
/>
</
telerik:RadGrid
>
//--------------------
//*** Codebehind
//--------------------
public
DataTable DataSource
{
get
{
dtAnnouncements = db.GetAnnouncementsTable(0, 1,
out
totalCount);
return
dtAnnouncements;
}
}
#region ragGridEvents
protected
void
Rebind(
object
sender, CommandEventArgs e)
{
RadGrid1.DataSource =
this
.DataSource;
}
protected
void
RadGrid1_NeedDataSource(
object
source, GridNeedDataSourceEventArgs e)
{
RadGrid1.DataSource =
null
;
RadGrid1.DataSource =
this
.DataSource;
}
private
void
SetupInputManager(GridEditableItem editableItem)
{
try
{
}
catch
(System.Exception ex)
{
}
}
protected
void
RadGrid1_ItemCreated(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridEditableItem && (e.Item.IsInEditMode))
{
GridEditableItem editableItem = (GridEditableItem)e.Item;
SetupInputManager(editableItem);
}
}
protected
void
RadGrid1_InsertCommand(
object
source, GridCommandEventArgs e)
{
try
{
string
strCommand = e.CommandName.ToString();
AddUpdate(e);
}
catch
(System.Exception ex)
{
}
}
protected
void
RadGrid1_UpdateCommand(
object
source, GridCommandEventArgs e)
{
try
{
string
strCommand = e.CommandName.ToString();
AddUpdate(e);
}
catch
(System.Exception ex)
{
}
}
protected
void
RadGrid1_DeleteCommand(
object
source, GridCommandEventArgs e)
{
try
{
string
strCommand = e.CommandName.ToString();
}
catch
(System.Exception ex)
{
}
}
#endregion
#region moveRows
protected
void
Upbtn_Click(
object
sender, EventArgs e)
{
ImageButton upbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)upbtn.NamingContainer;
saveRowOrder(item.ItemIndex,
"UP"
);
}
protected
void
Downbtn_Click(
object
sender, EventArgs e)
{
ImageButton downbtn = (ImageButton)sender;
GridDataItem item = (GridDataItem)downbtn.NamingContainer;
saveRowOrder(item.ItemIndex,
"DOWN"
);
}
public
void
saveRowOrder(
int
currentIndex,
string
action)
{
int
index = currentIndex;
string
rowAAnnouncementId =
""
, rowAListOrder =
""
, rowBAnnouncementId =
""
, rowBListOrder =
""
;
if
(action.Equals(
"DOWN"
))
index++;
else
index--;
GridItem movedItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[currentIndex]
as
GridItem);
GridItem afterItem = ((RadGrid1.MasterTableView.Controls[0]
as
Table).Rows[index]
as
GridItem);
string
key1 = RadGrid1.MasterTableView.DataKeyValues[currentIndex][
"ListOrder"
].ToString();
string
key2 = RadGrid1.MasterTableView.DataKeyValues[index][
"ListOrder"
].ToString();
int
key1Lang = Convert.ToInt32(RadGrid1.MasterTableView.DataKeyValues[currentIndex][
"LanguageID"
].ToString());
int
key2Lang = Convert.ToInt32(RadGrid1.MasterTableView.DataKeyValues[currentIndex][
"LanguageID"
].ToString());
if
(key1Lang != key2Lang)
{
DataRow row1 =
this
.DataSource.Select(String.Format(
"ListOrder = '{0}' AND LanguageID = '{1}'"
, key1, key1Lang.ToString()))[0];
DataRow row2 =
this
.DataSource.Select(String.Format(
"ListOrder = '{0}' AND LanguageID = '{1}'"
, key1, key1Lang.ToString()))[0];
//above line throws an error.
// i'm trying to move last record from page1 to page2
//Error:
// Index was out of range. Must be non-negative and less than the size of the collection.
// Parameter name: index
//**Values:
// currentIndex=9
// index=10
rowAAnnouncementId = row1[
"AnnouncementId"
].ToString();
rowAListOrder= row1[
"ListOrder"
].ToStringNullEmpty();
rowBAnnouncementId = row2[
"AnnouncementId"
].ToStringNullEmpty();
rowBListOrder = row2[
"ListOrder"
].ToStringNullEmpty();
db.AnnouncementsRowOrderUpdate(rowAAnnouncementId, rowBListOrder,
rowBAnnouncementId, rowAListOrder);
}
}
#endregion
I revise the provided code and was not able to isolate anything obvious that may lead to the problematic behavior. In this case I would kindly ask you to open a regular support ticket and send us sample runnable version of your application as well as exact steps for replicating the issue. Thus we will be able to debug it locally and advise you further.
Regards,
Maria Ilieva
Telerik