Renjith_R Ответов: 2

Включение/выключение редактирования строк сетки на основе условия


У меня есть столбец в gridview, и если значение "да", то gridview не должен редактироваться, иначе пользователь может редактировать.

Я пробовал 2 разных методов в командной строке и связанные данные строки.

Что я уже пробовал:

protected void grdChangeRequirement_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
        Label myTextBox = row.FindControl("lbl_SignOff") as Label;

        if (myTextBox.ToString() == "Yes")
        {
            Label btnUpdate = row.FindControl("btn_Update") as Label;
            Label btnCancel = row.FindControl("btn_Cancel") as Label;

            btnUpdate.Visible = false;
            btnCancel.Visible = false;
        }

    }


protected void grdChangeRequirement_RowDataBound(object sender, GridViewRowEventArgs e)
   {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
           Label btnUpdate = (e.Row.FindControl("btn_Update") as Label);
           Label btnCancel = (e.Row.FindControl("btn_Cancel") as Label);
           if (e.Row.Cells[12].Text == "Yes")
           {
               btnUpdate.Enabled = false;
           }
       }

   }

Karthik_Mahalingam

разместить разметку gridview

Renjith_R

&ЛТ;в ASP:GridView в идентификатор="grdChangeRequirement" атрибут runat="сервер" AutoGenerateColumns="ложных"
Width="100%" CellPadding="0" CellSpacing="0" BorderStyle="None" BorderWidth="0"
AllowPaging="true" OnRowCancelingEdit="grdChangeRequirement_RowCancelingedit" OnRowDeleting="grdChangeRequirement_RowDeleting"
OnRowEditing="grdChangeRequirement_RowEditing" OnRowUpdating="grdChangeRequirement_RowUpdating"
OnPageIndexChanging="grdChangeRequirement_PageIndexChanging" OnRowDataBound="grdChangeRequirement_RowDataBound"
OnRowCommand="grdChangeRequirement_RowCommand" OnSelectedIndexChanged="grdChangeRequirement_SelectedIndexchanged">
<колонки>

<asp:TemplateField HeaderText="SignOff" ItemStyle-BorderStyle="Solid"
ItemStyle-HorizontalAlign="Центр" HeaderStyle-Свойства Borderstyle="Твердый" HeaderStyle-HorizontalAlign="Центр"
HeaderStyle-Width="6%" HeaderStyle-Height="10%">
<itemtemplate>
&ЛТ;АСП:метка идентификатор="lbl_SignOff" атрибут runat="сервер" текст=в'<%#Ивала("выход") %&ГТ; в'>


<edititemtemplate>
&ЛТ;как ASP:dropdownlist с ИД="ddl_Signoff" CssClass="выпадающий" атрибут runat="сервер" SelectedValue=в'<%# Ивала("выход") %&ГТ; в'>
<asp:listitem>--выберите--
<asp:listitem>Да
<asp:listitem>Нет
<asp:listitem>NA






<asp:TemplateField ItemStyle-BorderStyle="Solid" ItemStyle-HorizontalAlign="Center"
HeaderStyle-свойства borderstyle="твердый" HeaderStyle-HorizontalAlign="центр"и GT;
<itemtemplate>
&ЛТ;АСП:кнопка ID="btn_Edit" атрибут runat="сервер" текст="редактировать" Имя_команды="редактировать" CssClass="input_button"
CommandArgument='<%# контейнер.DataItemIndex %>' />

<edititemtemplate>
&ЛТ;АСП:кнопка ID="btn_Update" атрибут runat="сервер" текст="обновить" Имя_команды="обновить" CssClass="input_button"
CausesValidation="false" />
&ЛТ;АСП:кнопка ID="btn_Cancel" атрибут runat="сервер" текст="отмена" Имя_команды="отмена" CssClass="input_button"
CausesValidation="false" />




Karthik_Mahalingam

проверьте решение

2 Ответов

Рейтинг:
0

Sibasisjena

Я думаю, вам нужна сетка OG "RowDataBound event".

protected void grdChangeRequirement_RowDataBound(object sender, GridViewRowEventArgs e)  
{ 
    //Code to get the textbox value [To Do]
    //Check the valeu 
    if (myTextBox.ToString() == "Yes")
    {
    // Code to disable the edit..
    }
}


Renjith_R

Здесь проблема не в редактировании или удалении. Я хочу отключить опцию редактирования в зависимости от состояния столбца. если у вас есть какой-либо обходной путь, пожалуйста, напишите об этом.
Заранее спасибо :)

Sibasisjena

Пожалуйста, проверьте, что soulution обновляется. Я думаю, вам нужно событие RowDataBound в сетке. Проверил свой код, который вы использовали в этом случае. С какой именно проблемой вы столкнулись? Ваш 2-й метод должен работать. Поместите отладчик в событие grdChangeRequirement_RowDataBound и дайте мне знать, идет ли туда элемент управления или нет.

Renjith_R

Я перепробовал все это. При нажатии на кнопку редактирования он не позволяет мне попасть внутрь цикла.
если (электронная.Подряд.RowType == DataControlRowType.Строкаданных)
{
Метки btnUpdate = (е,.Подряд.FindControl("btn_Update") в качестве метки);
Метки btnCancel = (е,.Подряд.FindControl("btn_Cancel") в качестве метки);
if (e.Row.Cells[12].Текст == "Да")
{
btnUpdate.Включено = ложь;
}
}

Sibasisjena

Вы имеете в виду, что метод grdChangeRequirement_RowDataBound не выполняется во время загрузки страницы?

Процесс:
1. При загрузке страницы метод grdChangeRequirement_RowDataBound будет выполняться для всех строк рекурсивно.
2. внутри этого метода вам нужно проверить myTextBox.Метод toString()
3. Если значение равно "да", то только сделайте кнопку редактирования отключенной.
Тогда это должно сработать. Пожалуйста, разместите свою разметку Gridview.

Renjith_R

Я уже упоминал, что это не позволяет мне попасть внутрь цикла If.

&ЛТ;в ASP:GridView в идентификатор="grdChangeRequirement" атрибут runat="сервер" AutoGenerateColumns="ложных"
Width="100%" CellPadding="0" CellSpacing="0" BorderStyle="None" BorderWidth="0"
AllowPaging="true" OnRowCancelingEdit="grdChangeRequirement_RowCancelingedit" OnRowDeleting="grdChangeRequirement_RowDeleting"
OnRowEditing="grdChangeRequirement_RowEditing" OnRowUpdating="grdChangeRequirement_RowUpdating"
OnPageIndexChanging="grdChangeRequirement_PageIndexChanging" OnRowDataBound="grdChangeRequirement_RowDataBound"
OnRowCommand="grdChangeRequirement_RowCommand" OnSelectedIndexChanged="grdChangeRequirement_SelectedIndexchanged">
<колонки>

<asp:TemplateField HeaderText="SignOff" ItemStyle-BorderStyle="Solid"
ItemStyle-HorizontalAlign="Центр" HeaderStyle-Свойства Borderstyle="Твердый" HeaderStyle-HorizontalAlign="Центр"
HeaderStyle-Width="6%" HeaderStyle-Height="10%">
<itemtemplate>
&ЛТ;АСП:метка идентификатор="lbl_SignOff" атрибут runat="сервер" текст=в'<%#Ивала("выход") %&ГТ; в'>


<edititemtemplate>
&ЛТ;как ASP:dropdownlist с ИД="ddl_Signoff" CssClass="выпадающий" атрибут runat="сервер" SelectedValue=в'<%# Ивала("выход") %&ГТ; в'>
<asp:listitem>--выберите--
<asp:listitem>Да
<asp:listitem>Нет
<asp:listitem>NA






<asp:TemplateField ItemStyle-BorderStyle="Solid" ItemStyle-HorizontalAlign="Center"
HeaderStyle-свойства borderstyle="твердый" HeaderStyle-HorizontalAlign="центр"и GT;
<itemtemplate>
&ЛТ;АСП:кнопка ID="btn_Edit" атрибут runat="сервер" текст="редактировать" Имя_команды="редактировать" CssClass="input_button"
CommandArgument='<%# контейнер.DataItemIndex %>' />

<edititemtemplate>
&ЛТ;АСП:кнопка ID="btn_Update" атрибут runat="сервер" текст="обновить" Имя_команды="обновить" CssClass="input_button"
CausesValidation="false" />
&ЛТ;АСП:кнопка ID="btn_Cancel" атрибут runat="сервер" текст="отмена" Имя_команды="отмена" CssClass="input_button"
CausesValidation="false" />



В сетке есть несколько столбцов, и я упомянул только один столбец в сетке.

Sibasisjena

При нажатии на кнопку "Редактировать", метод grdChangeRequirement_RowEditing будет казнен. Пожалуйста, проверьте и дайте мне знать

Renjith_R

Да

Sibasisjena

Так это сработало?

Рейтинг:
0

Karthik_Mahalingam

пробовать

protected void grdChangeRequirement_RowDataBound(object sender, GridViewRowEventArgs e)
       {

           if (e.Row.RowType == DataControlRowType.DataRow) {
               GridViewRow row = e.Row;
               Label lbl_SignOff = row.FindControl("lbl_SignOff") as Label;
               Label btnUpdate = row.FindControl("btn_Update") as Label;
               Label btnCancel = row.FindControl("btn_Cancel") as Label;
               if (lbl_SignOff.Text == "Yes")
               {
                   btnUpdate.Visible = false;
                   btnCancel.Visible = false;
               }
           }
       }


Renjith_R

Это частично работает. Теперь проблема заключается в том, что в сетке отображаются только столбцы со значениями "да". я вызвал функцию привязки сетки при загрузке страницы.

Пожалуйста помогите
Заранее спасибо

Karthik_Mahalingam

Показать код события загрузки страницы

Renjith_R

if (!IsPostBack)
{
lblSuccess.Текст = "";
ShowData();
DropdownBind();

}

Karthik_Mahalingam

все выглядит прекрасно
какая часть не работает

Renjith_R

При событии загрузки страницы сетка привязывается к значению Yes в столбце. раньше он использовал для привязки всех записей.

охраняемых недействительными grdChangeRequirement_RowDataBound(объект отправителя, GridViewRowEventArgs е)
{

если (электронная.Подряд.RowType == DataControlRowType.Строкаданных) {
GridViewRow row = e.Row;
Метка lbl_SignOff = строка.FindControl("lbl_SignOff") в качестве метки;
Метка btnUpdate = строка.FindControl("btn_Update") в качестве метки;
Метка btnCancel = строка.FindControl("btn_Cancel") в качестве метки;
если (lbl_SignOff.Текст == "Да")
{
btnUpdate.Видна = ложь;
btnCancel.Видна = ложь;
}
}
}

если я комментирую/пропускаю этот раздел, он связывается должным образом.

Karthik_Mahalingam

код ur выглядит нормально