Ricerca…


Associazione dati

Esistono due modi per associare un GridView. È possibile eseguirlo manualmente impostando la proprietà DataSource e chiamando DataBind() , oppure è possibile utilizzare un DataSourceControl come SqlDataSource .

Associazione manuale

Crea il tuo GridView:

<asp:GridView ID="gvColors" runat="server"></asp:GridView> 

Prima creare o recuperare i dati di origine per GridView. Quindi, assegnare i dati alla proprietà DataSource di GridView. Infine, chiama DataBind() .

List<string> colors = new List<string>();
colors.Add("Red");
colors.Add("Green");
colors.Add("Blue");

gvColors.DataSource = colors;
gvColors.DataBind();

DataSourceControl

Crea il tuo DataSourceControl:

<asp:SqlDataSource ID="sdsColors"
    runat="server"
    ConnectionString="<%$ MyConnectionString %>"
    SelectCommand="SELECT Color_Name FROM Colors">
</asp:SqlDataSource>

Crea il tuo GridView e imposta la proprietà DataSourceID :

<asp:GridView ID="gvColors"
    runat="server"
    DataSourceID="sdsColors">
</asp:GridView> 

colonne

Esistono sette diversi tipi di colonna che possono essere utilizzati all'interno di GridView.

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        ...
    </Columns>
</asp:GridView> 

BoundField:

<asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" />

ButtonField:

<asp:ButtonField ButtonType="Button" HeaderText="Select Employee" Text="Select"/>

CheckBoxField:

<asp:CheckBoxField DataField="IsActive" HeaderText="Is Active" />

CommandField:

<asp:CommandField ShowDeleteButton="true" 
    ShowEditButton="true" 
    ShowInsertButton="true" 
    ShowSelectButton="true" />

HyperLinkField:

<asp:HyperLinkField HeaderText="Employee Profile"
    DataNavigateUrlFields="EmployeeID"
    DataNavigateUrlFormatString="EmployeeProfile.aspx?EmployeeID={0}" />

ImageField:

<asp:ImageField HeaderText="Photo"
    DataImageUrlField="EmployeeID"
    DataImageUrlFormatString="/images/{0}" />

TemplateField:

<asp:TemplateField>
    <HeaderTemplate>
        Name
    </HeaderTemplate>
    <ItemTemplate>
        <asp:Label ID="lblEmployeeName"
            runat="server"
            Text='<&# Eval("EmployeeName") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

GridView fortemente tipizzato

A partire da Asp.net 4.5 i controlli web possono trarre vantaggio dall'associazione fortemente tipizzata per ottenere il supporto IntelliSense e gli errori di compilazione.

Crea una classe, che trattiene il tuo modello:

public class Album
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Artist { get; set; }
}

Definisci il controllo GridView sulla tua pagina:

<asp:GridView ID="Grid" runat="server" AutoGenerateColumns="false" ItemType="YourNamespace.Album">
    <Columns>
        <asp:TemplateField HeaderText="Id">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text="<%# Item.Id %>"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text="<%# Item.Name %>"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Artist">
            <ItemTemplate>
                <asp:Label ID="lblCity" runat="server" Text="<%# Item.Artist %>"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Carica i dati e collegali:

var albumList = new List<Album>
{
    new Album {Id = 1, Artist = "Icing (a Cake cover band)", Name = "Toppings Vol. 1"},
    new Album {Id = 2, Artist = "Fleetwood PC", Name = "Best of Windows"},
    new Album {Id = 3, Artist = "this.Bandnames", Name = "TH_ (Pronounced \"Thunderscore\")"},
};

Grid.DataSource = albumList;
Grid.DataBind();

Gestione dell'evento di comando

GridViews consente di inviare comandi da una riga GridView. Questo è utile per passare informazioni specifiche di una riga in un gestore di eventi come argomenti del comando.

Per iscriversi a un evento di comando:

<asp:GridView ID="GridView1" ... OnRowCommand="GridView1_RowCommand">

I pulsanti sono il modo più comune per aumentare i comandi. Supportano anche un modo per specificare gli argomenti del comando. In questo esempio, l'argomento è un ID dell'elemento rappresentato dalla riga.

<TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server"
                        CommandName="SampleCmd"
                        CommandArgument='<%# Eval("ID") %>'>
        </asp:LinkButton>
    </ItemTemplate>
</TemplateField>

In alternativa, è possibile utilizzare un modello di colonna CommandField che fornisce i controlli di comando più comuni.

Gestione dell'evento nel codice sottostante:

protected void GridView1_RowCommand(object source, GridViewCommandEventArgs e)
{
    if (e.CommandName == "SampleCmd")
    {
        var id = e.CommandArgument;
    }
}

Si noti che il CommandName utilizzato in questo esempio è arbitrario ed è una scelta dello sviluppatore. Esiste, tuttavia, un insieme di nomi predefiniti riconosciuti dalla GridView. Gli eventi corrispondenti vengono sollevati quando questi comandi vengono attivati.

Nome comando Eventi sollevati
Annulla RowCancelingEdit
Elimina RowDeleting, RowDeleted
modificare RowEditing
Pagina PageIndexChanging, PageIndexChanged
Selezionare SelectedIndexChanging, SelectedIndexChanged
Ordinare Ordinamento, ordinato
Aggiornare RowUpdating, RowUpdated

paging

ObjectDataSource

Se si utilizza ObjectDataSource, quasi tutto è già gestito per te, basta semplicemente dire a GridView di AllowPaging e assegnargli un PageSize .

<asp:GridView ID="gvColors"
    runat="server"
    DataSourceID="sdsColors"
    AllowPaging="True"
    PageSize="5">
</asp:GridView>

<asp:SqlDataSource ID="sdsColors"
    runat="server"
    ConnectionString="<%$ MyConnectionString %>"
    SelectCommand="SELECT Color_ID, Color_Name FROM Colors">
</asp:SqlDataSource>

Paging1 Paging2 Paging3

Associazione manuale

Se l'associazione viene eseguita manualmente, è necessario gestire l'evento PageIndexChanging . Basta impostare DataSource e PageIndex e reindirizzare GridView.

<asp:GridView ID="gvColors"
    runat="server"
    AllowPaging="True"
    PageSize="5"
    OnPageIndexChanging="gvColors_PageIndexChanging">
</asp:GridView>

C #

protected void gvColors_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvColors.DataSource = // Method to retrieve DataSource
    gvColors.PageIndex = e.NewPageIndex;
    gvColors.DataBind();
}

VB.NET

Protected Sub gvColors_PageIndexChanging(sender As Object, e As GridViewPageEventArgs)
{
    gvColors.DataSource = // Method to retrieve DataSource
    gvColors.PageIndex = e.NewPageIndex
    gvColors.DataBind()
}

Aggiorna Gridview sul clic di riga

Le GridView sono più utili se possiamo aggiornare la vista secondo le nostre necessità. Considera una vista con una funzione di blocco / sblocco in ogni riga. Può essere fatto come:

Aggiungi un pannello di aggiornamento:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> </asp:UpdatePanel>

Aggiungi un ContentTemplate e un Trigger all'interno di UpdatePanel:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate>
    </ContentTemplate>

    <Triggers>
    </Triggers>
</asp:UpdatePanel>

Aggiungi il tuo GridView all'interno di ContentTemplate:

<ContentTemplate>
<asp:GridView ID="GridView1" runat="server">
          <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:ImageButton ID="imgDownload" runat="server" OnClientClick="return confirm('Are you sure want to Lock/Unlock ?');"
                            CommandName="togglelock"
                            CommandArgument='<%#Container.DataItemIndex%>'/>
                        
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>

</ContentTemplate>

Qui stiamo dando al nostro GridView1 una colonna costante, per il pulsante di blocco. Intendiamoci, il database non ha avuto luogo fino ad ora.

Tempo per DataBind: (su PageLoad)

using (SqlConnection con= new SqlConnection(connectionString)) 
{
            SqlCommand sqlCommand = new SqlCommand(" ... ", con);
            SqlDataReader reader = sqlCommand.ExecuteReader();
            GridView1.DataSource = reader;
            GridView1.DataBind();
}

Blocca / Sblocca l'immagine sarà diversa in base al valore di una determinata colonna in GridView. Considera un caso in cui la tabella contiene un attributo / colonna intitolato "Stato blocco". Ora si desidera (1) nascondere quella colonna subito dopo DataBind e immediatamente prima del rendering della pagina e (2) Assegnare immagini diverse a ciascuna riga in base a quel valore di colonna nascosta, vale a dire se lo stato di blocco per una riga è 0, assegnarlo a "blocco". jpg ", se lo stato è 1 assegnalo" unlock.jpg ". Per fare ciò, utilizzeremo OnRowDataBound opzione OnRowDataBound di GridView, che si confonde con GridView, appena prima di rendere ogni riga alla pagina HTML.

<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"> ...

Nel file cs

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[8].Visible = false; //hiding the desired column which is column number 8 in this case
            GridView1.HeaderRow.Cells[8].Visible = false; //hiding its header
            ImageButton imgDownload = (ImageButton)e.Row.FindControl("imgDownload");
            string lstate = ((CheckBox)e.Row.Cells[8].Controls[0]).Checked.ToString();
            if (lstate == "True")
            { imgDownload.ImageUrl = "images/lock.png"; }
            else
            {
                imgDownload.ImageUrl = "images/unlock.png";
            }
        }
    }

Ora il GridView sarà reso come vogliamo, ora implementiamo eventi di clic sui pulsanti su quel pulsante Blocca / Sblocca immagine. Comprendere che per eseguire un'operazione specifica su una riga specifica, è necessario fornire un comando a tale riga e GridView ci fornisce la stessa funzionalità denominata OnRowCommand .

<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand">
...
</ContentTemplate>

e.CommandArgument una funzione nel file cs che accetta un object sender e GridViewCommandEventArgs e Con e.CommandArgument possiamo ottenere l'indice della riga che ha dato il comando Il punto da notare qui è che, una riga può avere più pulsanti e il cs il codice deve sapere quale pulsante da quella riga ha dato il comando. Quindi useremo CommandName

<asp:ImageButton ID="imgDownload" runat="server" OnClientClick="return confirm('Are you sure want to Lock/Unlock ?');"
                            CommandName="togglelock"
                            CommandArgument='<%#Container.DataItemIndex%>'/>

Ora nel backend è possibile distinguere i comandi da diverse righe e pulsanti diversi.

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "togglelock")
        {
            using (SqlConnection con= new SqlConnection(connectionString)) 
            {
               int index = Convert.ToInt32(e.CommandArgument);
               SqlCommand sqlCommand = new SqlCommand(" ... ", con);
               SqlDataReader reader = sqlCommand.ExecuteReader();
               GridView1.DataSource = reader;
               GridView1.DataBind();
            }
        }
    }

Aggiungi <asp:PostBackTrigger ControlID="GridView1"/> al Trigger e aggiornerà GridView una volta eseguito il DataBind.

Usa HorizontalAlign="Center" per posizionare GridView al centro della pagina.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow