खोज…


अनिवार्य तथ्य

ऐसे दो तरीके हैं जिनसे आप एक ग्रिड व्यू बांध सकते हैं। आप या तो इसे मैन्युअल रूप से DataSource संपत्ति सेट करके और DataBind() कॉल करके कर सकते हैं, या आप SqlDataSource जैसे DataSourceControl का उपयोग कर सकते हैं।

मैनुअल बाइंडिंग

अपना ग्रिड दृश्य बनाएं:

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

पहले ग्रिड व्यू के लिए स्रोत डेटा बनाएं या पुनर्प्राप्त करें। इसके बाद, डेटा को GridView के DataSource संपत्ति में असाइन करें। अंत में, DataBind() कॉल करें।

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

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

DataSourceControl

अपना डेटा स्रोत बनाएं:

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

अपना ग्रिड दृश्य बनाएं और DataSourceID संपत्ति सेट करें:

<asp:GridView ID="gvColors"
    runat="server"
    DataSourceID="sdsColors">
</asp: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>

मजबूत टाइप किए गए ग्रिड व्यू

Asp.net के साथ शुरू 4.5 वेब नियंत्रण IntelliSense समर्थन और संकलन त्रुटियों को प्राप्त करने के लिए दृढ़ता से टाइप किए गए बंधन से लाभ उठा सकता है।

एक वर्ग बनाएं, जो आपका मॉडल रखे:

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

अपने पृष्ठ पर ग्रिड दृश्य नियंत्रण को परिभाषित करें:

<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>

डेटा लोड करें और उसे बांधें:

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();

कमान घटना को संभालना

GridViews आदेशों को GridView पंक्ति से भेजने की अनुमति देता है। यह कमांड तर्कों के रूप में एक घटना हैंडलर में पंक्ति-विशिष्ट जानकारी पारित करने के लिए उपयोगी है।

कमांड ईवेंट की सदस्यता लेने के लिए:

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

बटन कमांड बढ़ाने का सबसे आम तरीका है। वे कमांड तर्कों को निर्दिष्ट करने के तरीके का भी समर्थन करते हैं। इस उदाहरण में, तर्क उस आइटम की एक ID है जिसे पंक्ति दर्शाती है।

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

वैकल्पिक रूप से, एक CommandField कॉलम टेम्पलेट का उपयोग कर सकता है जो सबसे सामान्य कमांड नियंत्रण प्रदान करता है।

पीछे कोड में घटना की हैंडलिंग:

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

ध्यान दें कि इस उदाहरण में प्रयुक्त CommandName मनमाना है और डेवलपर की पसंद है। हालाँकि, पूर्वनिर्धारित नामों का एक समूह है जिसे ग्रिडव्यू स्वयं पहचानता है। जब इन आदेशों को निकाल दिया जाता है तो पत्राचार की घटनाओं को उठाया जाता है।

कमांड का नाम घटनाक्रम उठाया
रद्द करना RowCancelingEdit
हटाएं रोवडेल्टिंग, रोव्डलेट
संपादित करें RowEditing
पृष्ठ PageIndexChanging, PageIndexChanged
चुनते हैं चयनितइंडेक्सचेंजिंग, चयनितइंडेक्सचेंज
तरह क्रमबद्ध करना, क्रमबद्ध करना
अपडेट करें RowUpdating, RowUpdated

पेजिंग

ObjectDataSource

यदि ObjectDataSource का उपयोग किया जाता है, तो लगभग सब कुछ आपके लिए पहले से ही संभाला जाता है, बस GridView को AllowPaging को AllowPaging और इसे एक 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

मैनुअल बाइंडिंग

यदि मैन्युअल रूप से बाध्यकारी है, तो आपको PageIndexChanging घटना को संभालना होगा। बस DataSource और PageIndex सेट करें और GridView को फिर से PageIndex

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

सी#

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()
}

पंक्ति क्लिक पर अद्यतन अपडेट

यदि हम अपनी आवश्यकता के अनुसार दृश्य को अपडेट कर सकते हैं तो ग्रिडव्यू अधिक उपयोगी हैं। प्रत्येक पंक्ति में लॉक / अनलॉक सुविधा के साथ एक दृश्य पर विचार करें। यह इस तरह किया जा सकता है:

एक अद्यतन पैनल जोड़ें:

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

अपने UpdatePanel के अंदर एक ContentTemplate और ट्रिगर जोड़ें:

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

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

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>

यहां हम लॉक बटन के लिए अपना ग्रिड व्यू 1 एक स्थिर कॉलम दे रहे हैं। ध्यान रहे, अब तक डेटाबाइंड नहीं हुई है।

डेटाबिंड का समय: (पेजलोड पर)

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

आपके ग्रिड व्यू में एक निश्चित कॉलम के मान के अनुसार लॉक / अनलॉक इमेज अलग होगी। उस मामले पर विचार करें जहां आपकी तालिका में "लॉक स्टेटस" शीर्षक वाला एक विशेषता / कॉलम है। अब आप (1) उस कॉलम को DataBind के ठीक बाद और पेज रेंडरिंग से ठीक पहले और (2) उस छिपे हुए कॉलम वैल्यू के आधार पर प्रत्येक पंक्ति में अलग-अलग छवियों को असाइन करना चाहते हैं, यानी यदि किसी पंक्ति का लॉक स्टेटस 0 है, तो इसे "लॉक" असाइन करें। jpg ", अगर स्टेटस 1 है तो इसे" unlock.jpg "असाइन करें। ऐसा करने के लिए, हम प्रत्येक पृष्ठ को HTML पृष्ठ पर रेंडर करने से पहले, GridView के OnRowDataBound विकल्प का उपयोग करेंगे, यह आपके GridView के साथ OnRowDataBound

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

सीएस फ़ाइल में

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";
            }
        }
    }

अब हम चाहते हैं कि ग्रिड व्यू का प्रतिपादन किया जाएगा, अब हम उस लॉक / अनलॉक छवि बटन पर बटन क्लिक घटनाओं को लागू करते हैं। समझें, कि एक विशिष्ट पंक्ति पर एक विशिष्ट ऑपरेशन करने के लिए, उस पंक्ति को एक कमांड देना पड़ता है और GridView हमें OnRowCommand नाम की समान कार्यक्षमता प्रदान करता है।

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

यह सीएस फाइल में एक फंक्शन बनाएगा जो एक object sender e.CommandArgument और GridViewCommandEventArgs e लेता है। e.CommandArgument साथ हम उस पंक्ति का इंडेक्स प्राप्त कर सकते हैं जिसने कमांड पॉइंट दिया है जिसे यहाँ नोट किया जा सकता है, एक पंक्ति में कई बटन और सीएस हो सकते हैं कोड को यह जानने की जरूरत है कि उस पंक्ति में से कौन सा बटन कमांड देता है। तो हम CommandName उपयोग CommandName

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

अब बैकएंड में अलग-अलग पंक्तियों और अलग-अलग बटन से कमांड को भेद कर सकते हैं।

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();
            }
        }
    }

Add <asp:PostBackTrigger ControlID="GridView1"/> Trigger करने के लिए और यह DataBind हो जाने के बाद GridView को अपडेट करेगा।

पृष्ठ के केंद्र में GridView को रखने के लिए HorizontalAlign="Center" का उपयोग करें।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow