Telerik RadGrid wählt mehrere Zeilen sogar mit AllowMultiRowSelection auf false gesetzt

StackOverflow https://stackoverflow.com/questions/2209205

  •  18-09-2019
  •  | 
  •  

Frage

Ich habe eine RadGrid, dass es Zeilen und Spalten hat programmatisch erstellt werden, und es gibt eine RadAjaxManager, das ein anderes Gremium für SelectedIndexChange aktualisieren gesetzt. Die RadGrid auch aktiviert und deaktiviert multirowselect hat Scrollen. Die RadGrid arbeitet wie sollte, aber sobald Sie es bewegen beginnt ausgewählte Elemente zu sammeln. Ich habe Bruchstellen festgelegt und überprüft durch Uhren, dass SelectedItems.Count wächst größer als 1. Dies verhindert auch aus früheren ausgewählten Zeilen auszuwählen, nachdem Sie gescrollt haben. Ich habe die ausgewählten Elemente auf der Seite entladen Ereignis versucht, löschen, aber wenn es macht es manchmal zeigt mehr als ein Element ausgewählt. Ich sage manchmal, weil es nicht im Einklang mit diesem Thema. Nur Muster, das ich bemerkt habe ist, dass Scrollen das Problem beginnt.

Das zweite Problem ist, dass jedes Mal, wenn die Seite Beiträge die Spaltenüberschriften verschwinden zurück. Diese völlig verwirrt mich, nicht sicher, was ist die Ursache dafür.

würde ich einen Rat dies zu schätzen wissen. Ich werde meinen Code als auch enthalten. Danke, und ich entschuldige für die schlechte Formatierung. Ich versuche immer noch, es herauszufinden.

P. S. Der Code, den ich aufgenommen habe eingerichtet ist, den Text für die Spalten und Zeilen zu erstellen, so dass keine tatsächlichen Daten benötigt wird. Sie können ganz einfach kopieren und fügen Sie den gleichen Code, um zu sehen, was ich sehe.

  

<rad:RadScriptManager ID="scm" runat="server"> </rad:RadScriptManager>

     

<rad:RadAjaxManager ID="AjaxManager" runat="server">
      <AjaxSettings>
      <rad:AjaxSetting AjaxControlID="grdCustomerAssignments">
      <UpdatedControls>
          <rad:AjaxUpdatedControl ControlID="grdCustomerAssignments" LoadingPanelID="pnlLoading1" />
      </UpdatedControls>
      </rad:AjaxSetting>
      <rad:AjaxSetting AjaxControlID="grdCustomerAssignments">
       <UpdatedControls>
        <rad:AjaxUpdatedControl ControlID="pnlDetails" />
       </UpdatedControls>
      </rad:AjaxSetting>
      </AjaxSettings>
  </rad:RadAjaxManager>

     

<rad:RadGrid ID="grdCustomerAssignments" runat="server" Skin="WebBlue" AutoGenerateColumns="false" AllowMultiRowSelection="false" OnNeedDataSource="grdCustomerAssignments_NeedDataSource" OnSelectedIndexChanged="grdCustomerAssignments_SelectedIndexChanged" OnSortCommand="grdCustomerAssignments_SortCommand">

<ClientSettings EnablePostBackOnRowClick="true" >
<ClientEvents/>
<Scrolling AllowScroll="true" ScrollHeight="350" UseStaticHeaders="true" SaveScrollPosition="true" />
<Selecting AllowRowSelect="true" />
<Resizing AllowColumnResize="true" />
</ClientSettings>

<MasterTableView DataKeyNames="ID" >

<HeaderStyle Wrap="false" HorizontalAlign="Center" VerticalAlign="Middle" Font-Bold="true" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="false" />
<AlternatingItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="false" />

<NoRecordsTemplate>
<div style="font-size:80%; color:Maroon;">No Items Were Found</div>
</NoRecordsTemplate>

</MasterTableView>

</rad:RadGrid>

<asp:Panel ID="pnlDetails" runat="server">
<rad:RadTabStrip ID="tabStrip" runat="server" Align="Justify" AppendDataBoundItems="false" SelectedIndex="0" MultiPageID="multiPage" Skin="WebBlue">
<Tabs></Tabs>
</rad:RadTabStrip>
<rad:RadMultiPage ID="multiPage" runat="server"></rad:RadMultiPage>
</asp:Panel>

protected DataTable Assignments { get; set; }  
protected Dictionary<string, IList<int>> TabTitles { get; set; }  


protected void Page_Init(object sender, EventArgs e)  
{  
  GetAssignments();  
  if (!IsPostBack)  
    AddColumnsToGrid();  
}  

protected void Page_Load(object sender, EventArgs e)  
{  
  tabStrip.Tabs.Clear();  
  multiPage.Controls.Clear();  
}  

protected void Page_UnLoad(object sender, EventArgs e)  
{  
  grdCustomerAssignments.MasterTableView.ClearSelectedItems();  
}  

protected void grdCustomerAssignments_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)  
{  
  grdCustomerAssignments.DataSource = Assignments;  
}  

protected void grdCustomerAssignments_SelectedIndexChanged(object sender, EventArgs e)  
{  
  try  
  {  
     string id = ((RadGrid)sender).SelectedValue.ToString();  
     DataRow dataRow = null;  
     foreach (DataRow row in Assignments.Rows)  
     {  
       if (row["ID"].ToString() == id)  
         dataRow = row;  
     }  

     PopulateAssignmentDetail(dataRow);  

  }  
  catch (Exception ex)  
  {  

  }  
}  

protected void PopulateAssignmentDetail(DataRow datarow)  
{  
  // just some code to populate the tabs.  
}  

protected void AddColumnsToGrid()  
{  
   grdCustomerAssignments.MasterTableView.Columns.Clear();  

  for (int i = 1; i < 7; i++)  
  {  
     DataColumn column = Assignments.Columns[i];  
     GridBoundColumn boundColumn = new GridBoundColumn();  
     boundColumn.HeaderText = column.Caption;  
     boundColumn.DataField = column.ColumnName;  
     grdCustomerAssignments.MasterTableView.Columns.Add(boundColumn);  
  }  
}  

private void GetAssignments()  
{  
if (Assignments == null)  
Assignments = new DataTable();  
if (TabTitles == null)  
TabTitles = new Dictionary<string, IList<int>>();  
try  
{  
Assignments.Columns.Add(new DataColumn("ID"));  
for (int i = 0; i < 50; i++)  
{  
Assignments.Columns.Add(new DataColumn("Column" + i.ToString()));  
}  
int columnIndex = 0;  
int tabIndex = 0;  
foreach (DataColumn column in Assignments.Columns)  
{  
if (columnIndex > 5)  
{  
string fieldCategory = "tab" + tabIndex.ToString();  
if (tabIndex == 4)  
tabIndex = 0;  
else  
tabIndex++;  
if (!TabTitles.ContainsKey(fieldCategory))  
{  
IList<int> tmp = new List<int>();  
tmp.Add(columnIndex);  
TabTitles.Add(fieldCategory, tmp);  
}  
else  
TabTitles[fieldCategory].Add(columnIndex);  
}  
columnIndex++;  
}  
for (int j = 0; j < 50; j++)  
{  
DataRow row = Assignments.NewRow();  
foreach (DataColumn column in Assignments.Columns)  
{  
row[column.ColumnName] = column.ColumnName + "Row" + j.ToString();  
}  
Assignments.Rows.Add(row);  
}  
Assignments.AcceptChanges();  
Session["Assignments"] = Assignments;  
}  
catch (Exception ex)  
{  

}  
}    
War es hilfreich?

Lösung

Ihr Code Nach der Prüfung Ich habe bemerkt, dass Sie die Rasterspalte auf init wenn! Page.IsPostBack erzeugen. Ich weiß aus früheren Unterstützung der Kommunikation mit Telerik, dass, wenn Sie das Raster statisch auf der Seite haben, sollten Sie die Spalten auf Pageload bauen, wenn! Page.IsPostBack- sie dirigierte mir Thema zu helfen, denn es ist in der Online-Hilfe suchen.

Auch wenn ich mich erinnere belesen ich in Release stellt fest, dass einige Problem dort mit praktisch Scrollen und ausgewählten Elemente war. Es sollte in der aktuellen Q3 2009 SP2-Version behoben werden.

Dick

scroll top