Member 12802669 Ответов: 2

Как Скрыть / показать кнопку на основе значения базы данных


I have a gridview and this Code(down below) I want to Show the button if the Status is open, otherwise the button should be invisible.
But this Code, does not work. The button is always visible.


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

<pre lang="c#"> protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (((GridView)sender).SelectedRow != null)
        {
            GridViewRow g = ((GridView)sender).SelectedRow;

            string assign= GridView1.SelectedRow.Cells[5].Text;

            btnassign.Visible = (assign == "open");
        }

    }






<asp:Button Text="assign" ID="btnassign"  Visible="false" OnClick="btnassign_Click" runat="server" />

Karthik_Mahalingam

показать код разметки gridview

[no name]

И что отладчик говорит вам об этом коде?

Richard Deeming

Я бы начал с того, что немного подчистил этот код:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow row = ((GridView)sender).SelectedRow;
    string status = (row == null) ? null : row.Cells[5].Text;
    btnassign.Visible = (status == "open");
}

Затем отладьте свой код и убедитесь, что у вас есть выбранная строка, а значение состояния-это то, что вы ожидаете.

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

Проверьте встроенные комментарии

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int statusColumnIndex = 5;  // ensure the correct column index (zero based index )
            string assign = GridView1.SelectedRow.Cells[statusColumnIndex].Text;
            assign = assign.Trim().ToLower(); // trim for extra spaces, and lower the case for exact comparison 
            btnassign.Visible = (assign == "open");
        }


Вышеизложенное будет работать, если вы используете bound field колонка.
если вы используете template столбец, например label контролируйте в нем, а затем используйте
string assign = (GridView1.SelectedRow.FindControl("lblStatusID") as Label).Text;


Прежде всего вы должны поставить break point внутри события и исследуйте SelectedRow объект и посмотреть на самом деле, что вы получаете внутри него, это лучший и эффективный способ решить любую проблему.
обратитесь к этой статье для отладки Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]


Рейтинг:
0

Ramesh Kumar Barik

Вы можете сделать это по-разному.

1. Получить значение из базы данных, как "истина/ложь" согласно вашей логике.Затем внутри шаблона элемента gridview добавьте одну кнопку и в ее видимых свойствах вы можете непосредственно установить значение статуса с помощью "Eval"
Экс:

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" 

                Width="486px" >
                <columns>
                    <asp:TemplateField HeaderText="Show Button">
                        <itemtemplate>
                            
                            <asp:Button runat="server" Visible='<%# Eval("Status") %>' Text="ButtonName" >





2. Вы можете использовать метод сетки gv_RowDataBound.

Внутри этого представления сетки свяжите значение статуса в скрытом поле с помощью шаблона элемента.Затем найдите скрытое значение поля из gv_RowDataBound метод и в соответствии с состоянием показать кнопку.

Экс:
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            foreach (GridViewRow rowInfo in gv.Rows)
            {
                
              HiddenField  hfFProductId = (HiddenField)rowInfo.FindControl("hdfId");
              Button buttonID = (Button)rowInfo.FindControl("buttonID");
              if (hfFProductId=="Open") buttonID.Visible=true;
              else buttonID.Visible=false;
                
                            }
        }


Проверьте этот код, он может вам помочь.
Счастливого кодирования..