Telerik RadGrid sélectionne plusieurs lignes, même avec AllowMultiRowSelection la valeur false

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

  •  18-09-2019
  •  | 
  •  

Question

J'ai un RadGrid qui a ses lignes et de colonnes créées programatically, et il y a un RadAjaxManager qui est mis à jour un autre groupe sur SelectedIndexChange. Le RadGrid a également le défilement activé et désactivé multirowselect. Le RadGrid fonctionne comme supposé, mais dès que vous faites, il commence à collecter les éléments sélectionnés. J'ai mis des points de rupture et vérifié par des montres qui SelectedItems.Count croît plus que 1. Cela empêche également de sélectionner les lignes précédentes sélectionnées après avoir fait défiler. Je l'ai essayé de dégager les éléments sélectionnés dans l'événement unload page, mais quand il le rend montre parfois plus d'un élément sélectionné. Je dis parfois parce qu'il ne correspond pas à cette question. modèle que j'ai remarqué est que le défilement commence le problème.

Le deuxième problème est que chaque fois que les messages de dernière page les en-têtes colonne disparaissent. Celui-ci déconcerte totalement moi, ne sais pas ce qui est la cause pour elle.

Je vous serais reconnaissant de conseils à ce sujet. Je vais ajouter mon code. Merci, et j'appologize pour la mise en forme pauvre. Je suis encore en train de le comprendre.

P.S. Le code que j'ai inclus est configuré pour créer un texte pour les colonnes et les lignes, donc aucune donnée réelle est nécessaire. Vous pouvez facilement copier et coller le même code pour voir ce que je vois.

  

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

}  
}    
Était-ce utile?

La solution

Après avoir inspecté votre code je remarquai que vous générez la colonne de la grille sur init lorsque! Page.IsPostBack. Je sais que de la communication de soutien précédent avec Telerik que lorsque vous avez la grille statique sur la page, vous devez construire les colonnes sur PageLoad quand! Page.IsPostBack- ils me adressées à la rubrique d'aide, chercher dans l'aide en ligne.

Aussi, si je me souviens bien, je lis dans la version note qu'il y avait un problème de défilement virtuellement et les éléments sélectionnés. Il devrait être fixé dans le dernier Q3 2009 version SP2.

Dick

Autres conseils

(désolé, je ne peux pas aider, mais) Pourquoi ne pas que vous publiez sur le telerik forums ou créer un billet soutien ? Habituellement, vous aurez une réponse dans les 24 heures.

est un code de bouton ce code peut vous aider à supprimer enregistrements multiples qui checkbox vous avez sélectionné dans votre 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();
                }
            }

        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top