AspxGridView 复选框选中的列值

AspxGridView checkbox checked column value

我在使用复选框的地方使用 aspxGridview。现在,当我检查任何行的特定列值时,我需要在服务器端获取以完成我的业务逻辑。 下面是使用的gridview:

<dx:ASPxGridView KeyFieldName="PracticeID" ID="ASPxGrd" runat="server" ClientInstanceName="grid"
                            ClientIDMode="AutoID" AutoGenerateColumns="false" Width="100%" OnSelectionChanged="ASPxGrd_SelectionChanged">
                            <Columns>
                                <dx:GridViewDataColumn VisibleIndex="0" Name="CheckBoxColumn">
                                    <DataItemTemplate>
                                        <dx:ASPxCheckBox ID="ASPxCheckBox1" runat="server" OnCheckedChanged="ASPxCheckBox1_CheckedChanged" AutoPostBack="true">
                                        </dx:ASPxCheckBox>
                                    </DataItemTemplate>
                                </dx:GridViewDataColumn>
                                
                                <dx:GridViewDataColumn FieldName="PracticeName" Caption="Description" VisibleIndex="1">
                                <FooterTemplate>
                                    Total:
                                </FooterTemplate>
                                </dx:GridViewDataColumn>
                                 </dx:ASPxGridView>

我尝试在 auto postback 为真的复选框中使用 oncheckedevent 并使用代码来获取选定的行,如下所示:

 protected void ASPxCheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            ASPxGridView grid = sender as ASPxGridView;
            string currentMasterKey = Convert.ToString(grid.GetMasterRowKeyValue());
        }
但得到网格对象的空值。 需要帮助。

在您的示例中,您使用了 DataItemTemplate,因此在这种情况下,发送方将是添加到该数据模板中的控件,即 ASPxCheckBox,并且您将其转换为网格 bcoz,因为它正在变为空。

试试下面的代码片段。

protected void ASPxCheckBox1_CheckedChanged(object sender, EventArgs e)
{
    ASPxCheckBox checkBox = sender as ASPxCheckBox;
    var grid = (checkBox.NamingContainer as DevExpress.Web.ASPxGridView.GridViewDataItemTemplateContainer).Grid;
    string currentMasterKey = Convert.ToString(grid.GetMasterRowKeyValue());
}

我之前找到了这个答案,它运行良好,如下所示:

   

 for (int i = 0; i < ASPxGrd.VisibleRowCount; i++)
            {
                ASPxCheckBox chk = ASPxGrd.FindRowCellTemplateControl(i, null, "ASPxCheckBox1") as ASPxCheckBox;
                if (chk.Checked)
                {
                    if (i == 0)
                    {
                        practiceName = ASPxGrd.GetRowValues(i, "PracticeName").ToString();
                    }
                 }
                 }

使用此代码我能够获取选中的复选框列值。