Пользовательский отображаемый текст столбца применяется к ячейкам, это не должно - PullRequest
0 голосов
/ 21 сентября 2018

Я застрял при использовании события CustomColumnDisplayText.Я использую этот код:

private void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
{
    if (e.Column == colVehicle_FahrzeugartID && e.ListSourceRowIndex >= 0)
    {
        for (int i = 0; i < gridViewList.DataRowCount; i++)
        {
            object cellValue = gridViewList.GetRowCellValue(i, "Vehicle_FahrzeugartID");
            this.clsFahrzeugart.ReadFromDb((int)cellValue);

            if (this.clsFahrzeugart.Systemstatus == 11 && e.ListSourceRowIndex == i)
            {
                e.DisplayText = "Deleted...";
            }
        }
    }
}

для отображения удаленных, если значение Systemstatus равно 11, что означает удаленный в моей базе данных, и все работает нормально, но если я переключаю свой переключатель, в моем столбце появляются пустые значения инекоторые значения изменяются на удаленные, хотя они не имеют значения 11.

Так выглядит при переключении коммутатора:

enter image description here

И вот как это должно выглядеть:

enter image description here

bool isOn = toggleSwitch1.EditValue is bool ? (bool)toggleSwitch1.EditValue : false;
if (isOn)
{
    tbAutoBindingSource1.Filter = "Vehicle_Systemstatus = 1";
    btn_UnDel.Visible = false;
}
else
{
    tbAutoBindingSource1.Filter = "Vehicle_Systemstatus IS NOT NULL";
    btn_UnDel.Visible = true;
}

Кто-нибудь знает, как это исправить?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

В вашем коде несколько ошибок.

0.Бессмысленный цикл в событии.

Событие CustomColumnDisplayText используется для отображения текста в текущей обработанной ячейке.Итак, все, что вам нужно, это получить значения в соответствии с этой ячейкой.

1.Неправильное использование метода GetRowCellValue.

Вам необходимо использовать RowHandle для GetRowCellValue.ListSourceRowIndex здесь не так.RowHandle и ListSourceRowIndex - это не одно и то же.Вам нужно использовать метод GetRowHandle, чтобы получить RowHandle из ListSourceRowIndex.

Вот пример:

private void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
{
    if (e.Column == colVehicle_FahrzeugartID && e.ListSourceRowIndex >= 0)
    {
        int rowHandle = gridViewList.GetRowHandle(e.ListSourceRowIndex);
        object cellValue = gridViewList.GetRowCellValue(rowHandle, "Vehicle_FahrzeugartID");
        this.clsFahrzeugart.ReadFromDb((int)cellValue);

        if (this.clsFahrzeugart.Systemstatus == 11)
        {
            e.DisplayText = "Deleted...";
        }
    }
}
0 голосов
/ 21 сентября 2018

Вам не нужно проходить через все строки, так как это событие вызывается для отдельной строки.Поскольку это событие предоставляет свойство e.ListDataSourceRowIndex , связанное с индексом строки источника данных, а не дескриптор строки, необходимо использовать метод GridView.GetListSourceRowCellValue для доступа к значению ячейки.

Обратитесь к разделу справки Rows , чтобы узнать различия между индексами источника данных и дескрипторами строк сетки.

private void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
{
    GridView view = sender as GridView;
    if (e.Column == colVehicle_FahrzeugartID && e.ListSourceRowIndex >= 0)
    {
        object cellValue = view.GetListSourceRowCellValue(e.ListSourceRowIndex, "Vehicle_FahrzeugartID");
        this.clsFahrzeugart.ReadFromDb((int)cellValue);
        if (this.clsFahrzeugart.Systemstatus == 11)
            e.DisplayText = "Deleted...";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...