আমি থ্যাড রেন্ডার করার জন্য গ্রিডভিউ কীভাবে পাব?


112

আমি ট্যাগগুলি কীভাবে GridViewরেন্ডার করতে <thead> <tbody>পারি? আমি জানি .UseAccessibleHeadersএটির <th>পরিবর্তে এটি তৈরি করে <td>, তবে আমি <thead>উপস্থিত হতে পারি না ।


এফওয়াইআই: ইউজএ্যাক্সেসিবলহিডার ডিফল্টরূপে "সত্য", সুতরাং আপনাকে এটি সেট করার দরকার নেই। msdn.microsoft.com/en-us/library/…
— মাইকটিভি

উত্তর:


187

এটি করা উচিত:

gv.HeaderRow.TableSection = TableRowSection.TableHeader;

69
HeaderRowসম্পত্তি হতে হবে nullযতক্ষণ না GridViewডেটা আবদ্ধ হয়েছে, তাই যতক্ষণ না databinding কোডের উপরের লাইনটি চালানোর আগে ঘটেছে অপেক্ষা করতে ভুলবেন না।
— বিডুক্স

6
নীচের মতামত হিসাবে, এএসপি.নেট 4.5 এর সাথে কমপক্ষে বাঁধাইয়ের পরে কমপক্ষে দেরি না হয় - তবে এটি অনপ্রেঞ্জারে কাজ করে।
— ফিল্ম

আমি কাস্টম সাব হেডার যুক্ত সঙ্গে একটি গ্রিডভিউ আছে। এই সাব-হেডারগুলির প্রত্যেকটি ডেটা উত্স থেকে ডেটা দেখায়। যে কারণে আমি রেন্ডার করতে চেয়েছি তা theadহ'ল এটি jQuery এ ব্যবহার করা। তবে শিরোনাম উপস্থাপনের পরে, tbodyমনে হয় এটি উপলব্ধ হবে না। আমার ক্ষেত্রে কি অনুপস্থিত হতে পারে?
— BonCodigo

1
আমি দেখতে পেলাম যে পোস্টব্যাকের সময় এখনও সমস্যা আছে এবং কোডটি ডেটাবাউন্ড ইভেন্টে রেখেছিল যা সমস্ত পরিস্থিতিতে সম্বোধন করে।
— জেমস ওয়েস্টগেট

ব্যবহারকারী যখন একটি বোতামে ক্লিক করেন আমি একটি ডেটাবেস থেকে আমার ডেটা নিয়ে আসি। সেক্ষেত্রে গ্রিডভিউটি এডিড ট্যাগটি অনুপস্থিত। কোন সাহায্য?
— টুনিটা

25

আমি OnRowDataBoundইভেন্টে এটি ব্যবহার :

protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.Header) {
        e.Row.TableSection = TableRowSection.TableHeader;
    }
}

7
এটি আমার জন্য কাজ করা একমাত্র সমাধান। এই ভয়ঙ্কর নিয়ন্ত্রণগুলি কে ডিজাইন করেছে?
— EKW

2
আমি আপনার কোডটিকে অনরউয়ে তৈরি ইভেন্টে inুকিয়ে দিয়েছি এবং এটি সঠিকভাবে কাজ করতে পেয়েছি।
— yougotiger

এটি সেরা সমাধান কারণ এটি ডাটাসোর্সের মধ্যে কোনও সারি না থাকলে টেবিলসেকশনটি ঝুঁকিপূর্ণ (এবং প্রয়োজনীয় চেক) অপসারণ করে।
— এভিলড্রি

1
ফাই, যদি এটি GridViewএকটি এর মধ্যে থাকে UpdatePanelএবং কোনও অন্য নিয়ন্ত্রণের ফলে একটি অ্যাসিঙ্ক-পোস্টব্যাক হয় তবে OnRowDataBoundইভেন্টটি উত্থাপিত হবে না এই উত্তরটির কোডটি কার্যকর করা হবে না, ফলস্বরূপ ট্যাগ GridViewছাড়াই রেন্ডারিংয়ে ফিরে আসবে <thead>... দীর্ঘশ্বাস । এই কেসটিকে লক্ষ্য করতে, গৃহীত উত্তর থেকে কোডটি গ্রিডভিউয়ের PreRenderইভেন্ট হ্যান্ডলারের দিকে সরিয়ে দিন (অনেকটা আসালভোর উত্তর অনুসারে)।
— মিঃজেড

এটি সঠিক উত্তর, কারণ এটি সঠিকভাবে ওয়েবফোর্ডস ওয়ার্কফ্লো ব্যবহার করে।
— মার্সেল

10

উত্তরে কোডের উপর যেতে প্রয়োজন Page_Loadবা GridView_PreRender। আমি এটি এমন একটি পদ্ধতিতে রেখেছিলাম যা পরে ডাকা হয়েছিল Page_Loadএবং একটি পেয়েছি NullReferenceException।


4
আপনি DataBoundইভেন্টে রাখতে পারেন। grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
— ব্রুনোএলএম

4
এটি এখন নেট নেট ৪.৫-এ আলাদা কিনা তা জানুন না ... তবে আমি _ডাটাবাউন্ড এবং _প্রিয়েন্ডার ইভেন্ট হ্যান্ডলার উভয় ক্ষেত্রে শিরোনামটি শূন্য হয়ে যাচ্ছি। এটি গ্রিডভিউতে এএসপি.এনইটি ওয়েব ফর্মগুলি নতুন "মডেল বাইন্ডিং" বৈশিষ্ট্যটি ব্যবহার করার সাথে সম্পর্কিত হতে পারে।
— ক্লিয়ারক্লাউড 8

7

আমি এটি করতে নিম্নলিখিত কোড ব্যবহার করি:

ifবিবৃতি আমি যোগ গুরুত্বপূর্ণ।

অন্যথায় (আপনি কীভাবে আপনার গ্রিডটি রেন্ডার করেন তার উপর নির্ভর করে) আপনি ব্যতিক্রমগুলি এড়িয়ে যাবেন:

টেবিলটিতে শিরোনাম, শরীরে এবং তারপরে পাদচরণগুলি সারি বিভাগ থাকা আবশ্যক।

protected override void OnPreRender(EventArgs e)
{
    if ( (this.ShowHeader == true && this.Rows.Count > 0)
      || (this.ShowHeaderWhenEmpty == true))
    {
        //Force GridView to use <thead> instead of <tbody> - 11/03/2013 - MCR.
        this.HeaderRow.TableSection = TableRowSection.TableHeader;
    }
    if (this.ShowFooter == true && this.Rows.Count > 0)
    {
        //Force GridView to use <tfoot> instead of <tbody> - 11/03/2013 - MCR.
        this.FooterRow.TableSection = TableRowSection.TableFooter;
    }
    base.OnPreRender(e);
}

thisবস্তু আমার GridView হয়।

আমি আমার নিজস্ব কাস্টম নিয়ন্ত্রণ তৈরি করতে আসলে Asp.net গ্রিডভিউকে ওভাররড করেছি, তবে আপনি এটিকে আপনার এসপ্যাক্স.সি.এস. পৃষ্ঠায় পেস্ট করতে পারেন এবং কাস্টম-গ্রিডভিউ পদ্ধতির পরিবর্তে নাম দিয়ে গ্রিডভিউ উল্লেখ করতে পারেন।

এফওয়াইআই: আমি পাদলেখ যুক্তি পরীক্ষা করিনি, তবে আমি জানি এটি শিরোনামগুলির জন্য কাজ করে।


5

এটি আমার পক্ষে কাজ করে:

protected void GrdPagosRowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.TableSection = TableRowSection.TableBody;
    }
    else if (e.Row.RowType == DataControlRowType.Header)
    {
        e.Row.TableSection = TableRowSection.TableHeader;
    }
    else if (e.Row.RowType == DataControlRowType.Footer)
    {
        e.Row.TableSection = TableRowSection.TableFooter;
    }
}

এটি VS2010 এ চেষ্টা করা হয়েছিল।


2

একটি ফাংশন তৈরি করুন এবং আপনার PageLoadইভেন্টে এই ফাংশনটি ব্যবহার করুন :

ফাংশনটি হ'ল:

private void MakeGridViewPrinterFriendly(GridView gridView) {  
    if (gridView.Rows.Count > 0) {          
        gridView.UseAccessibleHeader = true;  
        gridView.HeaderRow.TableSection = TableRowSection.TableHeader;  
    }  
} 

PageLoadঘটনা হল:

protected void Page_Load(object sender, EventArgs e) {
        if (!IsPostBack)
        {
            MakeGridViewPrinterFriendly(grddata);
        }
}

1

আমি জানি এটি পুরানো, তবে এখানে একটি স্ট্যান্ডার্ড গ্রিডভিউর জন্য মাইকটাইভির উত্তরটির ব্যাখ্যা দেওয়া হল:

এসপেক্স পৃষ্ঠা:

<asp:GridView ID="GridView1" runat="server" 
    OnPreRender="GridView_PreRender">

aspx.cs:

    protected void GridView_PreRender(object sender, EventArgs e)
    {
        GridView gv = (GridView)sender;

        if ((gv.ShowHeader == true && gv.Rows.Count > 0)
            || (gv.ShowHeaderWhenEmpty == true))
        {
            //Force GridView to use <thead> instead of <tbody> - 11/03/2013 - MCR.
            gv.HeaderRow.TableSection = TableRowSection.TableHeader;
        }
        if (gv.ShowFooter == true && gv.Rows.Count > 0)
        {
            //Force GridView to use <tfoot> instead of <tbody> - 11/03/2013 - MCR.
            gv.FooterRow.TableSection = TableRowSection.TableFooter;
        }

    }

0

এটি যুক্ত করতে আপনি jQuery ব্যবহার করতে পারেন। এটি টেবিলরোসেকশন নিয়ে সমস্যা এড়ায় T টেবিলহিডার যেখানে পোস্টব্যাকে নেমে আসে।

$('#myTableId').prepend($("<thead></thead>").append($(this).find("#myTableId tr:first")));

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.