Telerik RadGrid wählt mehrere Zeilen sogar mit AllowMultiRowSelection auf false gesetzt
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)
{
}
}
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
Andere Tipps
(sorry ich kann nicht helfen, aber) Warum buchen Sie nicht auf die telerik Foren oder ein Ticket -Support? In der Regel werden Sie eine Antwort innerhalb von 24 Stunden erhalten.
Dies ist ein Button-Code kann dieser Code helfen Sie mehrere Datensatz zu löschen, die Sie Checkbox in Ihrem RadGrid ausgewählt haben.
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();
}
}
}