Я отправляю другой ответ, потому что он сильно отличается от того, что был в моем предыдущем ответе, и объединение обоих в один ответ будет очень запутанным для читателя.
Это решение полностью соответствует вашим требованиям, как показано на следующем снимке экрана. Тем не менее, это очень индивидуальное решение, и мой предыдущий ответ подойдет, если вы хотите придерживаться только того, что доступно для RadGrid.
![EXpand Column shifted in Hierarchical grid](https://i.stack.imgur.com/nD5JD.png)
Основные моменты, о которых следует помнить, приведены ниже.
- Вам нужно включить jquery, чтобы это работало. Вы можете легко сделать это, используя встроенный jquery, который поставляется с библиотекой управления Telerik. Я упомянул разметку, которая автоматически включит встроенный jquery на вашу страницу.
- Я предположил, что вы используете привязку на стороне сервера для иерархической RadGrid.
- Вам нужно просто добавить блок JavaScript, показанный ниже, на страницу aspx, чтобы это работало.
- Я перемещаю столбец раскрытия непосредственно перед 3-м столбцом, но вы можете переместить его в любую позицию, установив для переменной
newPosition
соответствующее значение.
- В вашем сценарии вы должны установить newPosition в 1, поэтому столбец раскрытия появляется непосредственно перед вторым столбцом.
- Обратите внимание, что при смещении столбца раскрытия также необходимо сместить заголовок столбца раскрытия, иначе заголовки столбцов не будут выровнены с их столбцами.
JavaScript для этого решения
<script type="text/javascript">
Sys.Application.add_load(function () {
$ = $telerik.$;//make sure you can use $ symbol for embedded jquery
var newPosition = 2;//set this to 1 or 2 or 3 etc.(but never 0)
//depending on your requirement
//gridClientId is the server-side RadGrid1.ClientID property i.e. id of radgrid div element in rendered page
//var gridClientId = "<%=RadGrid1.ClientId%>";
var grid = $find(gridClientId);
var dataItems = grid.get_masterTableView().get_dataItems();
for (var i = 0; i < dataItems.length; i++) {
//get the expand column for the the row with index i
var row = $(grid.get_masterTableView().get_dataItems()[i].get_element());
var expandColumn = row.find("td.rgExpandCol");
//move the data row expand column
expandColumn.detach().insertBefore(row.find("td:eq(" + newPosition + ")"));
expandColumn.width(50);
}
//move the column header for expand column
var headerRow = $(grid.get_masterTableView().HeaderRow);
var headerExpandColumn = headerRow.find(".rgExpandCol");
headerExpandColumn.detach().insertBefore(headerRow.find("th:eq(" + newPosition+ ")"));
headerExpandColumn.width(50);
});
</script>
Разметка для включения встроенного jquery
<telerik:RadScriptManager runat="server" ID="RadScriptManager1">
<Scripts>
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
<%!-- othert scripts of your page will go here -->
</telerik:RadScriptManager>