Telerik RadGrid selecciona varias filas incluso con AllowMultiRowSelection establece en falso

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

  •  18-09-2019
  •  | 
  •  

Pregunta

Tengo un RadGrid que tiene sus filas y columnas que se crean mediante programación, y hay una RadAjaxManager que está configurado para actualizar otro panel en SelectedIndexChange. El RadGrid también ha scrolling activado y desactivado multirowselect. El RadGrid funciona como suponía, pero tan pronto como se desplaza comienza la recogida de los elementos seleccionados. He fijado puntos de quiebre y verificado a través de relojes que crece SelectedItems.Count mayor que 1. Esto también impide seleccionar filas seleccionadas anteriores después de haber desplazar. He tratado de despejar los elementos seleccionados en el caso de la página de descarga, pero cuando se hace a veces muestra más de un elemento seleccionado. A veces digo porque no es compatible con este tema. Único patrón que he notado es que el desplazamiento empieza el problema.

La segunda cuestión es que cada vez que la página envía la columna encabezados desaparecen. Éste me desconcierta totalmente, no está seguro de cuál es la causa de la misma.

Le agradecería cualquier consejo sobre esto. Voy a incluir mi código también. Gracias, y yo appologize para los pobres formato. Todavía estoy tratando de averiguarlo.

P.S. El código que he incluido está configurado para crear un texto para las columnas y filas, por lo que no se necesita información real. Puede copiar y pegar el mismo código para ver lo que estoy viendo.

  

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

}  
}    
¿Fue útil?

Solución

Después de inspeccionar el código me di cuenta de que se genere la columna de la cuadrícula en init cuando! Page.IsPostBack. Sé por apoyar la comunicación previa con Telerik que cuando se tiene la red de forma estática en la página, se debe construir las columnas en pageLoad cuando! Page.IsPostBack- dirigieron mí ayudar a tema, búsquelo en la ayuda en línea.

Además, si no recuerdo mal, así que he leído en notas de la versión que había algún problema con prácticamente el desplazamiento y los elementos seleccionados. Debe fijarse en la última versión SP2 Q3 2009.

Dick

Otros consejos

(lo siento, no puedo ayudar, pero) ¿Por qué no se publique en el telerik Los foros de o crear una de tickets de soporte ? Por lo general, usted obtendrá una respuesta en 24 horas.

Este es un código de botón este código puede ayudar a eliminar el registro múltiple que se han checkbox seleccionado en su 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();
                }
            }

        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top