Różne elementy w komórce GridView (ASP.NET)

0

Problem: Mamy kontrolkę GridView z polami powiedzmy Id, Imie, Nazwisko i ostatnią komórką gdzie chce wyświetlać Buttona lub np. HyperLinka w zależności od warunku zwracanego przez metodę operującą na informacji z wiersza np. bool CzyButton(Imie, Nazwisko).

Pytanie: W jaki sposób zrealizować warunkowe wyświetlanie Buttona lub HyperLinka w komórce GridView ?

0

Dajesz if, a w nim zmieniasz swój gridview.

Np tak:

this.dataGridView1[0, 0] = new DataGridViewComboBoxCell();

spowoduje to, iż komórka o współrzędnych 0,0 będzie typu combobox.

0

Polaczek chyba pomyliłeś GridView z DataGridView ... Proszę o inne wskazówki.

0

Faktycznie.
Nie mam teraz jak tego sprawdzić, ale przetestuj sobie takie coś:

Button b = new Button();
GridView1.Rows[0].Cells[0].Controls.Add(b)

Niestety nie daję głowy czy zadziała bo piszę z pamięci bez kompilatora.

0

Takie rzeczy robi się w zdarzeniu RowDataBound.

Zakładamy, że mamy taką klasę:

namespace WebApplication2
{
    public class Student
    {
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
    }
}

Taki formularz:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            onrowdatabound="GridView1_RowDataBound">
            <Columns>
                <asp:BoundField DataField="Imie" />
                <asp:BoundField DataField="Nazwisko" />
                <asp:ButtonField Text="Button" />
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>

I taki code behind:

using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;

namespace WebApplication2
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<Student> studenty = new List<Student>()
            {
                new Student() { Imie="Ala", Nazwisko="Srala", },
                new Student() { Imie="Grzegorz", Nazwisko="Brzęczyszczykiewicz", },
                new Student() { Imie="Jaś", Nazwisko="Fasola", },
                new Student() { Imie="Adam", Nazwisko="Sienkiewicz", },
            };

            this.GridView1.DataSource = studenty;
            this.GridView1.DataBind();
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[2].Visible = CzyPrzycisk((Student)e.Row.DataItem);
            }
        }

        protected bool CzyPrzycisk(Student s)
        {
            return (s.Imie + s.Nazwisko).Length > 10;
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1