Telerik RadGrid seleziona più righe anche con AllowMultiRowSelection impostato su false

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

  •  18-09-2019
  •  | 
  •  

Domanda

Ho una RadGrid che ha è righe e colonne creati programatically, e c'è un RadAjaxManager che è impostato per aggiornare un altro pannello su SelectedIndexChange. Il RadGrid ha anche scrolling abilitata e disabilitata multirowselect. Il RadGrid funziona come dovrebbe, ma non appena si scorre inizia la raccolta di elementi selezionati. Ho impostato punti di interruzione e verificati attraverso orologi che SelectedItems.Count cresce più grande che 1. Questo impedisce anche dalla selezione precedenti righe selezionate dopo aver scorrere. Ho provato a svuotare gli elementi selezionati nel caso pagina scarico, ma quando si rende talvolta mostra più di un elemento selezionato. Lo dico a volte perché non è coerente con questo problema. Solo modello che ho notato è che lo scorrimento inizia il problema.

La seconda questione è che ogni volta che i posti pagina Torna colonna intestazioni scompaiono. Questo totalmente mi sconcerta, non so cosa sia la causa di esso.

Gradirei qualche consiglio su questo. Io includo il mio codice pure. Grazie, e io scusiamo per i poveri formattazione. Sto ancora cercando di capirlo.

P.S. Il codice Ho incluso è impostato per creare un testo per le colonne e le righe, quindi non sono necessari dati effettivi. Si può facilmente copiare e incollare lo stesso codice per vedere quello che sto vedendo.

  

<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)  
{  

}  
}    
È stato utile?

Soluzione

Dopo aver ispezionato il codice ho notato che si genera la colonna griglia init quando! Page.IsPostBack. So precedente comunicazione di supporto con Telerik che quando si ha la griglia staticamente sulla pagina, si dovrebbe costruire le colonne su PageLoad quando! Page.IsPostBack- hanno indicato che l'aiuti argomento, cercare nella guida in linea.

Anche se ricordo bene ho letto in note di rilascio che c'era qualche problema con praticamente lo scorrimento e gli elementi selezionati. Dovrebbe essere risolto nel più recente 3 ° trimestre 2009 il rilascio di SP2.

Dick

Altri suggerimenti

(mi dispiace non posso fare, ma) Perché non post nel Telerik forum o creare un supporto biglietto ? Di solito si otterrà una risposta entro 24 ore.

questo è un codice del pulsante questo codice può aiutare a cancellare registrare multipla che si casella di controllo Controllare hanno selezionato nel RadGrid.

 protected void Button3_Click(object sender, EventArgs e)
            {
                Area_Master Area;
                int i;


            foreach (GridDataItem item in Grd_Area.Items)//loops through each grid row
            {
                CheckBox chkBx = (CheckBox)item.FindControl("chkArea");
                if (chkBx.Checked)
                {
                    i =  Convert.ToInt32(item.Cells[3].Text); //accessing cell using its ColumnUniqueName
                    var query = from obj in cnx.Area_Master where obj.PKAreaID == i select obj;
                    Area = query.FirstOrDefault();
                    cnx.DeleteObject(Area);
                    cnx.SaveChanges();
                }
            }

        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top