Telerik的radgrid控件的选择,即使AllowMultiRowSelection设置为false多行
题
我有一个具有它的被编程产生的行和列,并且存在被设置为更新SelectedIndexChange另一个小组一个RadAjaxManager一个radgrid控件。该radgrid控件还滚动启用和禁用multirowselect。该radgrid控件工作像预想的那样,但只要你把它的滚动开始收集选定的项目。我已经设置断点并手表证实SelectedItems.Count增长大于1,这也从你滚屏之后选择先前选定的行阻止。我试图清除在页面卸载事件选定的项目,但是当它使得它有时会显示所选择的多个项目。我说,有时候,因为它不是这个问题是一致的。只有我注意到模式是滚动启动的问题。
的第二个问题是,每一次的页面回头消失的列。这一个完全令我感到困惑,不知道什么是它的原因。
我想知道关于此的任何建议。我会包含我的代码。谢谢,我appologize穷人格式。我仍然试图弄明白。
P.S。我已经包括了代码设置为创建列和行文本,所以不需要实际数据。您可以轻松地复制和粘贴相同的代码,看看我所看到的。
<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)
{
}
}
解决方案
检查你的代码后,我注意到,你在生成初始化网格列时!Page.IsPostBack。我知道,从以前的支持与Telerik的沟通,当你有电网静态页面上,你应该建立在pageLoad的列时!Page.IsPostBack-他们指示我帮助的话题,联机帮助中进行搜索。
另外,如果我记得好,我读发行说明,有一些问题,几乎滚动和选择的项目。应该固定在最新的2009年第三季度SP2释放。
迪克
其他提示
(抱歉,我不能帮助,但)你为什么不张贴到 Telerik的论坛或创建支持票?通常你会在24小时内得到答案。
这是一个按钮的代码 此代码可以帮助你删除的复选框您在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();
}
}
}