Telerik Radgrid는 alluctirowseelection이 false로 설정된 경우에도 여러 행을 선택합니다.

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

  •  18-09-2019
  •  | 
  •  

문제

프로그래밍 방식으로 행과 열이 생성되는 Radgrid가 있으며 SelectedIndexChange에서 다른 패널을 업데이트하도록 설정된 RadajaxManager가 있습니다. Radgrid에는 또한 스크롤 활성화 및 멀티로 변수 선택 비활성화가 있습니다. Radgrid는 예상대로 작동하지만 스크롤하자마자 선택한 항목을 수집하기 시작합니다. SelectedItems가있는 시계를 통해 중단 점을 설정하고 검증 한 결과 1보다 커집니다. 또한 스크롤 된 후 이전 선택된 행을 선택하지 못합니다. 페이지 언로드 이벤트에서 선택한 항목을 지우려고 시도했지만 렌더링되면 때때로 하나 이상의 항목이 선택된 것을 보여줍니다. 이 문제와 일치하지 않기 때문에 때때로 말합니다. 내가 알아 차린 패턴은 스크롤이 문제를 시작한다는 것입니다.

두 번째 문제는 페이지가 게시 될 때마다 열 헤더가 사라질 때마다입니다. 이 사람은 나를 완전히 당황하게합니다.

나는 이것에 대한 조언에 감사드립니다. 내 코드도 포함하겠습니다. 감사합니다. 저는 열악한 형식에 대해 사과합니다. 나는 아직도 그것을 알아 내려고 노력하고있다.

PS 포함 된 코드는 열과 행에 대한 텍스트를 만들기 위해 설정되었으므로 실제 데이터가 필요하지 않습니다. 동일한 코드를 쉽게 복사하여 붙여 넣어 내가보고있는 내용을 확인할 수 있습니다.

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

}  
}    
도움이 되었습니까?

해결책

코드를 검사 한 후 init when! page.ispostback에서 그리드 열을 생성하는 것을 알았습니다. Telerik과의 이전 지원 커뮤니케이션에서 페이지에 정적으로 그리드를 가지고있을 때 Pageload에서 열을 작성해야한다는 것을 알고 있습니다! page.ispostback- 그들은 주제를 돕고 온라인 도움말에서 검색하도록 지시했습니다.

또한 잘 기억한다면 릴리스 노트에서 사실상 스크롤 및 선택한 항목에 문제가 있다는 사실을 읽었습니다. 최신 Q3 2009 SP2 릴리스에서 수정해야합니다.

형사

다른 팁

(죄송하지만 도와 드릴 수 없지만) 왜 Telerik 포럼 또는 a 지원 티켓? 일반적으로 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();
                }
            }

        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top