Member 13289364 Ответов: 2

Вид кнопки в GridView в соответствующей категории пользователей


У меня есть gridview, и я хочу добавить кнопку "Просмотр", которая перенаправляет на страницу (Customers.aspx?CustomerID=), которая ссылается на отчет. У каждого клиента есть свой идентификатор, и каждый идентификатор связан с отчетом.

Я не хочу, чтобы идентификатор отображался в моем gridview, и я хочу, чтобы он был скрыт. Кроме того, я хочу, чтобы эта кнопка отображалась только в том случае, если пользователь является категорией "администратор" или "продавец". Есть ли способ привязать мой CustomerID к UserCategory для создания отчетов для каждого идентификатора отдельно?

Я попробовал посмотреть и другие посты, но моя кнопка почему-то не перенаправляет. Может ли кто-нибудь помочь мне понять, что я здесь делаю не так или что-то упускаю? Кроме того, есть ли более простой способ сделать это, любая помощь будет очень признательна. Спасибо.

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

<asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="btnView" runat="server" CausesValidation="false" CommandName="Select" Text="VIEW"  />
             </ItemTemplate>
             <ControlStyle CssClass="button" />
          </asp:TemplateField>



protected void btnView(object sender, EventArgs e)
   {
       txtHFUserCategory.Value = Session["UserCategoryPC"].ToString();


       if (txtHFUserCategory.Value == "A" || txtHFUserCategory.Value == "B" )

       {

           Button btn = (Button)sender;
           GridViewRow row = (GridViewRow)btn.NamingContainer;

           Label lblCustomerID = (Label)row.FindControl("lblCustomerID");
           String strCustomerID = lblCustomerID.Text;
           Session["UserID"] = txtHFUserID.Value;
           Response.Redirect("Customer.aspx?CustomerID=" );

       }


   }

j snooze

разве ваш редирект не должен быть response. redirect ("Customer. aspx?customerid=" + strCustomerID); или я что-то упустил?

2 Ответов

Рейтинг:
0

Sheila Pontes

Привет,
Как вы используете gridview, чтобы скрыть идентификатор, используйте DataKeyNames свойство компонента. Вы не видите удостоверение.

<asp:GridView ID="grd_result" DataKeyNames="id" runat="server" OnRowCommand="grd_result_RowCommand">

Чтобы активировать кнопку, Не используйте компонент кнопки в поле TemplateField, используйте ButtonField компонент, это проще. Эта кнопка выполняется OnRowCommand событие.
У вас может быть много полей в вашей сетке, чтобы дифференцировать их. Имя_команды собственность.
<asp:ButtonField ButtonType="Link" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="100px" CommandName="view" HeaderText="" Text="View" ControlStyle-BorderColor="Black" />

Вот пример, который поможет вам.
HTML-код
<div>
        <asp:GridView ID="grd_result" DataKeyNames="id" runat="server" EmptyDataText=":: No Data ::" AutoGenerateColumns="False" BorderStyle="Solid" OnRowCommand="grd_result_RowCommand" FooterStyle-CssClass="GridFooter" AllowPaging="false"  ShowFooter="True">
            <Columns>
                <asp:ButtonField ButtonType="Link" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="100px" CommandName="view" HeaderText="" Text="View" ControlStyle-BorderColor="Black" />
                <asp:BoundField HeaderText="Name"  datafield="name" HeaderStyle-HorizontalAlign="Left" />
            </Columns>
        </asp:GridView>    
    </div>
    <br />
    <asp:Label ID="lblmsg" runat="server" Text="-"></asp:Label>

С ФОНОВЫМ КОДОМ
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Fill the gridview with data.
                DataTable dt = new DataTable();
                dt.Columns.Add("id");dt.Columns.Add("name");

                DataRow dr = dt.NewRow();
                dr["id"] = "1";dr["name"] = "John";dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["id"] = "2";dr["name"] = "Mary";dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["id"] = "3"; dr["name"] = "Sarah";dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["id"] = "4";dr["name"] = "Peter";dt.Rows.Add(dr);

                this.grd_result.DataSource = dt;
                this.grd_result.DataBind();
            }
        }

        private bool user_permission(string user)
        {
            //Here, the code that verify if the user is admin or Salesperson
            //This information is normally record in the database.
            return true;
        }

        protected void grd_result_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                //this.Page.User.Identity.Name. This code is used if you authenticate the system with an user and password.
                if (this.user_permission(this.Page.User.Identity.Name))
                {
                    //find the name button.
                    string current_command = e.CommandName;
                    //find the index of line that i clicked.
                    int current_row_index = Int32.Parse(e.CommandArgument.ToString());
                    //find the id the line.
                    string id = this.grd_result.DataKeys[current_row_index].Value.ToString();

                    switch (current_command)
                    {
                        case "view":
                            {
                                this.lblmsg.Text = "My id is " + id + " and my name is " + this.grd_result.Rows[current_row_index].Cells[1].Text;
                                break;
                            }
                    }
                }
                else{this.lblmsg.Text = "You don't have permission to execute this task.";}
            }
            catch (Exception ex)
            {
                this.lblmsg.Text = "Error: " + ex.Message; 
            }
        }


Рейтинг:
0

Karthik_Mahalingam

Скрыть колонку

int columnToHide =4;
if(role=="Admin"){
GridView1.Columns[columnToHide].Visible = false;
}


Вы должны использовать Hidden поле вместо поля Label чтобы скрыть и сохранить данные