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


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.