ASPxGridView
에는 DataItemTemplate
이 포함 된 열이 포함되어 있는데,이 열은 ASPxCheckBox
입니다. 그런 다음 체크 박스가 선택되었는지 여부에 따라 일부 동작을 수행하는 격자 외부에 단추가 있습니다. 그리드 같은 Page_Load
채워집니다ASPxGridView는 ASPxCheckBox를 사용하여 정렬 및 DataItemTemplate을 허용합니다.
<dx:ASPxGridView ID="grid" runat="server">
<Columns>
<dx:GridViewDataColumn>
<DataItemTemplate>
<ds:ASPxCheckBox ID="checkbox" runat="server" />
</DataItemTemplate>
</dx:GridViewDataColumn>
<Columns>
</dx:ASPxGridView>
:
그리드
는 다음과 같이 정의된다protected void Page_Load(object sender, EventArgs e)
{
//Some stuff
grid.DataSource = sourceTable;
grid.DataBind();
//Other stuff
}
sourceTable
는 다음과 같이 정의되는 경우 :
public DataTable sourceTable
{
get
{
if (ViewState["sourceTable"] == null)
return new DataTable();
return (DataTable)ViewState["sourceTable"];
}
set
{
ViewState["sourceTable"] = value;
}
}
그리고 다른 곳에 채워집니다. (인구는 중요하지 않으며 작동하지 않습니다)
코드는 다양한 DevExpress 지원 항목에 정의 된대로 정렬 및 페이징이 올바르게 그리드에서 작동하도록 구현되었습니다. 이해할 수 있습니다. 우리는 버튼 클릭에 checkbox
에서 Checked
값을 얻을려고 그러나, 그것은 항상 false입니다
protected void button_Click(object sender, EventArgs e)
{
//Some stuff
for(int i = 0; i < grid.VisibleRowCount; i++)
{
//Other stuff
ASPxCheckBox checkbox = grid.FindRowCellTemplateControl(i, grid.Columns[0], "checkbox") as ASPxCheckBox;
if(checkbox.Checked) //Always false
{
//Do conditional stuff
}
//More stuff
}
//Even more stuff
}
내가 그리드가 데이터를 리 바인드 및 기본 상태에있는 확인란을 재현으로이 항상 false입니다 이유를 이해 , DevExpress 상태에 관한 Page_Load
의 데이터 바인딩을 랩으로 처리하는 if(!Page.IsPostBack)
에있는이 문서에서 발견 한 모든 문서가 실제로 작동하지만 정렬 및 페이징이 중단됩니다.
나는 내가 한 다른 프로젝트에서 이것을위한 해결책을 가지고 있다고 확신한다. 나는 그것을 찾을 수 없다. 이 경우 어떻게해야합니까?
참고 : 코드를 최대한 짧게 만들었으므로 테스트 해보지 않았습니다. 실제 코드에는 약간의 오류가있을 수 있지만, 내가하려고하는 것에 대한 지침으로 사용하고 사람들이 겪을 수있는 문제를 명확히 할 것입니다.
편집 :이 조건이 Checked
이 항상 false입니다 의미 제거, 그리드에 정렬 및 페이징 Page_Load
정지에 if(!Page.IsPostBack)
또는 if(!Page.IsCallback)
사용. 정렬/페이징 모두 발생해야하며 DataItemTemplate
에 ASPxCheckBox
의 Checked
값을 읽을 수 있어야합니다.
나는 이것을 시도했지만 여전히 작동하지 않습니다. 테스트에서'button_Click'' grid.VisibleRowCount' = 2, for 루프로 들어가서'ASPxCheckBox checkbox = grid.FindRowCellTemplateControl (i, grid.Columns [0], "체크 박스)]를 ASPxCheckBox로 설정하면'null'입니다. . 'grid.VisibleRowCount'를 다시 검사하면 0이됩니다. 왜 이런 일이 생길까요? – anothershrubery
좋아, 이건 Valeh의 솔루션에 동일한 문제가있는 것 같습니다. 'button_Click'에서 페이지가 다시 게시되고 따라서 데이터에 리바운드되지 않으므로'grid.FieldRowCellTemplateControl'은'grid.GetDataRow'처럼 널을 반환합니다. 이것은 다소 짜증이 날 것입니다. – anothershrubery
Valeh의 솔루션과는 아무런 관련이 없습니다. 포스트 그리드에서 모든 그리드 데이터를 사용할 수 있습니다 (이전 그리드 데이터는 다시 채워지지 않습니다). 예를 들어 왜 'VisibleRowCount'를 가지고 있는지.클라이언트로 다시 보내면 값을 유지할 수 없기 때문에 그리드를 다시 채우지 않고 데이터를 서버로 다시 전달할 때 문제가 발생합니다. 나는 왜 당신이 체크 박스를 null로 가져올 지 확신하지 못한다. 그러나 나는 그 또 다른 문제라는 느낌을 가지고있다. 곧 살펴 보겠습니다. –