Использовать DataKeyNames и CheckBox в GridTemplateColumn, чтобы увидеть, какие строки были выбраны?

У нас есть веб-форма с сеткой и кнопкой. Radgrid имеет два столбца и столбец флажка.

На странице Page_load будут отображаться данные, и пользователь сможет выбрать (с помощью флажка), какие строки будут проходить при обновлении EmpId; если строка выбрана, NewEmpId заменит OldEmpId. Нажимается кнопка «Обновить», и изменения вносятся.

Проблема, с которой я столкнулся, заключается в том, что я предпочитаю использовать имена данных для извлечения данных из каждой строки. Но у меня возникли проблемы с его реализацией без использования GridCheckBoxColumn, который я не хочу использовать, потому что для выбора флажка radgrid должен находиться в режиме редактирования, а это вызывает другие проблемы.

<telerik:RadGrid ID="RadGridEmp" runat="server" AutoGenerateColumns="False" Width="100%" AllowPaging="True" PageSize="22">
    <ClientSettings>
      <Selecting AllowRowSelect="True" />
    </ClientSettings>
    <mastertableview commanditemdisplay="TopAndBottom" datakeynames="OldEmpId, NewEmpId, EmpName">
        <commanditemsettings showaddnewrecordbutton="false" />
            <Columns>
                <telerik:GridBoundColumn DataField="OldEmpId" HeaderText="OldEmpId">
                    <HeaderStyle Width="110px"></HeaderStyle>
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="NewEmpId" HeaderText="NewEmpId">
                    <HeaderStyle Width="110px"></HeaderStyle>
                </telerik:GridBoundColumn>
                <ItemTemplate>
                    <asp:CheckBox ID="ChkChange" runat="server" />
                </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
    </mastertableview>
</telerik:RadGrid>

Следующий код - это просто код, который я предпочитаю использовать с этой проблемой. Он использует имена данных. Но не строит:

protected void RadButtonUpdateSectors_Click(object sender, EventArgs e)
{
    foreach (GridItem item in RadGridEmp.MasterTableView.Items)
    {
        GridDataItem dataitem = (GridDataItem)item;
        TableCell cell = dataitem["GridCheckBoxColumn"];
        CheckBox checkBox = (CheckBox)cell.Controls[0];
        if (checkBox.Checked)
        {
            oldEmpId = dataitem.GetDataKeyValue("OldEmpId").ToString();
            newEmpId = dataitem.GetDataKeyValue("NewEmpId").ToString();
            UpdateEmpId(oldEmpId, newEmpId, connString);
        }
    }
}

person fdkgfosfskjdlsjdlkfsf    schedule 02.12.2015    source источник


Ответы (1)


Попробуйте использовать приведенный ниже фрагмент кода.

datakeynames="OldEmpId,NewEmpId,EmpName"
...............
...............
protected void RadButtonUpdateSectors_Click(object sender, EventArgs e)
{
    foreach (GridDataItem item in RadGridEmp.MasterTableView.Items)
    {
        CheckBox ChkChange = item.FindControl("ChkChange") as CheckBox;
        if (ChkChange.Checked)
        {
            string oldEmpId = item.GetDataKeyValue("OldEmpId").ToString();
            string newEmpId = item.GetDataKeyValue("NewEmpId").ToString();
            UpdateEmpId(oldEmpId, newEmpId, connString);
        }
    }
}

Сообщите мне, если возникнут какие-либо проблемы.

Примечание. - Удалите лишнее пространство из имен данных.

person Jayesh Goyani    schedule 04.12.2015
comment
Сработало отлично. Спасибо. - person fdkgfosfskjdlsjdlkfsf; 08.12.2015