আপনি কীভাবে একটি ডেটাগ্রিডভিউ নিয়ন্ত্রণে কলামগুলিকে স্বয়ংক্রিয়ভাবে আকার পরিবর্তন করতে এবং একই গ্রিডে থাকা কলামগুলিকে পুনরায় আকার দেওয়ার অনুমতি দেবেন?


109

আমি একটি উইন্ডোজ ফর্মে ডেটাগ্রিডভিউ নিয়ন্ত্রণ পপুলেট করছি (সি # 2.0 ডাব্লুপিএফ নয়)।

আমার লক্ষ্য হ'ল একটি গ্রিড প্রদর্শন করা যা কোষগুলির সাথে সমস্ত উপলব্ধ প্রস্থকে ঝরঝরে করে পূরণ করে - অর্থাত কোনও অব্যবহৃত (গা dark় ধূসর) অঞ্চলটি ডানদিকে নীচে নেই এবং প্রতিটি কলামকে এতে থাকা ডেটা অনুযায়ী যথাযথ আকার দেয় , তবে ব্যবহারকারীকে যে কোনও কলামের আকার পরিবর্তন করতে দেয় তাদের পছন্দ অনুসারে

আমি প্রতিটি কলামের অটসাইজমোডটি ডেটাগ্রিডভিউআউটোসাইজ কলামমোড হিসাবে সেট করে এটি অর্জনের চেষ্টা করছি Data গ্রিডের পুরো অঞ্চলটি পরিচ্ছন্নভাবে পূর্ণ হয় তা নিশ্চিত করার জন্য আমি যে কলামগুলিতে ডেটাগ্রিডভিউআউটোসাইজ কলামমোড সেট করেছি সেগুলি ব্যতীত সমস্ত কক্ষগুলি পূরণ করুন। (আমি মনে করি না যে ব্যবহারকারী যখন এই কলামটি পুনরায় আকার দেওয়ার চেষ্টা করবেন তখন এটি এমন আকারে ফিরে আসে যা অনুভূমিক স্থানটি সর্বদা ব্যবহৃত হয় তা নিশ্চিত করে))

তবে, যেমন আমি উল্লেখ করেছি, একবার লোড হয়ে গিয়েছি আমি ব্যবহারকারীকে কলামগুলি তাদের নিজস্ব প্রয়োজনীয়তার সাথে মাপ দিতে দিতে মঞ্জুরি দিতে চাই - প্রতিটি কলামের জন্য এই অটোসাইজমোড মানগুলি সেট করার ক্ষেত্রে দেখা যায় যে ব্যবহারকারী তখন সেই কলামগুলির আকার পরিবর্তন করতে অক্ষম।

আমি চেষ্টা করেছি যে সমস্ত কলামগুলির অটোসাইজমোড সেট না করে যা পুনরায় আকার দেওয়ার অনুমতি দেয় তবে কোটগুলি থাকা তথ্য অনুসারে প্রাথমিক আকার সেট করে না। ডেটা লোড করার পরে গ্রিডের অটোসাইজমোডটি "সেট নয়" এ ফিরে যাওয়ার সময় একই ফলস্বরূপ ঘটে।

এখানে কি এমন একটি সেটিং অনুপস্থিত রয়েছে যা ডিফল্ট কলামের প্রস্থ এবং ব্যবহারকারীকে পুনরায় আকার দেওয়ার স্বয়ংক্রিয় সেটিংকে মঞ্জুরি দেয় বা ডেটাগ্রিডভিউ নিয়ন্ত্রণ পপুলেট করার সময় আমার অন্য কোনও প্রযুক্তি ব্যবহার করতে হবে?


এটি "নট সেট" এ সেট করবেন না এটি "কিছুই নয়" এ সেট করুন যাতে পুনরায় আকার ফিরে আসবে না - সি #, .NET2.0
bh_earth0 এর

উত্তর:


132

এই কৌশলটি আমার পক্ষে কাজ করে:

grd.DataSource = DT;

//set autosize mode
grd.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
grd.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
grd.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

//datagrid has calculated it's widths so we can store them
for (int i = 0; i <= grd.Columns.Count - 1; i++) {
    //store autosized widths
    int colw = grd.Columns[i].Width;
    //remove autosizing
    grd.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    //set width to calculated by autosize
    grd.Columns[i].Width = colw;
}

এখানে যা ঘটে তা হ'ল আপনি যা প্রয়োজন মোডে অটোসাইজ সেট করেছেন এবং তারপরে কলামের সাহায্যে কলামটি আপনি সেটি স্বয়ংক্রিয় গণনা থেকে যে প্রস্থটি পেয়েছেন তা সংরক্ষণ করেন, অটোসাইজিং সরান এবং আপনার পূর্বে সঞ্চিত মানকে প্রস্থ সেট করে।


1
আমি অটোরাইজাইজ কলাম উইথ্থথথইটেলোউজারউজারাইজিং নামে একটি রুটিনে অনুরূপ কোডটি রেখেছি। গ্রিডটি প্রাথমিকভাবে পপুলেট হওয়ার পরে এবং ব্যবহারকারীর ডেটা সম্পাদনের পরে (এটি গ্রিডের সেলএন্ডএডিট ইভেন্ট থেকে) বলা হয়।
বিকাশকারী

5
এটি দুর্দান্ত কোড। 'ডেটাগ্রিডভিউ 1_ডাটাসোর্স চেঞ্জড' ইভেন্টে রাখা দরকার।
ব্যবহারকারী 890332

1
আমার কাছে মনে হয় যে করা grd.Columns(i).Width = grd.Columns(i).Widthইতিমধ্যে কৌশলটি করবে। এখানে দেখুন ।
আন্তোনিও

2
সি # এর জন্য একই তবে বর্গাকার বন্ধনীগুলির সাথে dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
বার্লপ

এটি খুব দেরিতে এসেছিল, তবে কোনও সুযোগ বা উপায়, আমরা কোনও নির্দিষ্ট সারির সামগ্রীর উপর ভিত্তি করে আকার পরিবর্তন করতে পারি? প্রথম সারিতে থাকা কক্ষের সামগ্রীর উপর ভিত্তি করে, অন্যান্য সারিগুলির কক্ষগুলির প্রস্থতা নির্বিশেষে বলা যাক?
মুরতুজা হোসেন

45

আপনি কল করতে পারে

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.Fill);

ডেটাসোর্স সেট করার পরে। এটি প্রস্থ সেট করে এবং পুনরায় আকার দেওয়ার অনুমতি দেবে।

এমএসডিএন ডেটাগ্রিডভিউ.আউটো রিসাইজ কলমস পদ্ধতি (ডেটাগ্রিডভিউআউটসোসাইজ কলামমোড) এ আরও


2
আমি নিশ্চিত না কেন এই উত্তরটি আরও মনোযোগ পাচ্ছে না। অনেক ক্লিনার আপনি যদি সেল কন্টেন্টের প্রস্থের ডেটাগ্রিডভিউআউটসাইজ কলমমোড মোড খুঁজছেন তবে সমস্ত কক্ষগুলি আরও ভাল কাজ করে।
iwalkbarefoot

31
এই সমাধানটি ব্যবহার করে আমি পরবর্তী ত্রুটিটি পাচ্ছি : "প্যারামিটার অটোসাইজ কলামমোড এই ক্রিয়াকলাপের জন্য বৈধ নয় It এটি নোটসেট, না কিছুই বা ভরাট হতে পারে না তবে আকার দেওয়ার মানদণ্ডটি নির্দেশ করতে হবে।" । আমি এই ডেটা গ্রিডভিউ 1
itsho

6
ডেটাগ্রিডভিউআউটোসাইজ কলামমোড ব্যবহার করুন Usingফিলটি কাজ করে না কারণ কলামগুলি আকার দেওয়ার সময় এটি সেল সামগ্রীগুলি উপেক্ষা করে।
স্টুয়ার্ট হেলভিগ

আমি এই পদ্ধতি ব্যবহার করেছেন DataGridViewAutoSizeColumnsMode.DisplayedCells। তদ্ব্যতীত, ফর্ম ডিজাইনারে, অটোসাইজ কলামগুলি মোড কোনওটিতে সেট করা নেই। এটি সর্বদা (পুনরায়) আকারগুলি সঠিকভাবে নিশ্চিত করার জন্য আমার এই ডাটা কলটি ডেটাগ্রিডভিউয়ের ডেটাবিন্ডিং কমপ্লিট ইভেন্ট হ্যান্ডলারটিতে সম্পাদন করা দরকার।
দান

7
আমি সমস্ত উত্সগুলি বুঝতে পারি না ... এটি মোটেও কাজ করে না, এমএসডিএন ডকুমেন্টেশন স্পষ্ট, এটি করা যদি একটি অরগমেন্টএক্সেপশন বাড়ে তবে যদি অটোসাইজ কলমমোডের মানটি কোনও হয় না বা পূরণ হয় না।
ল্যারি

31

মিরোস্লাভ জাদ্রাভেকের কোডের এসি # সংস্করণ

for (int i = 0; i < dataGridView1.Columns.Count-1; i++)
{
    dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
dataGridView1.Columns[dataGridView1.Columns.Count - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
    int colw = dataGridView1.Columns[i].Width;
    dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    dataGridView1.Columns[i].Width = colw;
}

সম্প্রদায়ের উইকি হিসাবে পোস্ট করা যাতে অন্যের সুনাম ছড়িয়ে না যায়


15

আমার অ্যাপ্লিকেশন আমি সেট করেছি

grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;

এছাড়াও, আমি সেট করেছি

grid.AllowUserToOrderColumns = true;
grid.AllowUserToResizeColumns = true;

এখন কলামের প্রস্থ পরিবর্তন করা যেতে পারে এবং কলামগুলি ব্যবহারকারী দ্বারা পুনরায় সাজানো যায়। এটা আমার জন্য বেশ ভাল কাজ করে।

সম্ভবত এটি আপনার পক্ষে কাজ করবে।


গ্রিডের অটোসাইজ কলামমোডগুলি "পূরণ করুন" তে সেট করা সমস্ত কলাম একই প্রস্থে সেট করে বলে মনে হচ্ছে। হ্যাঁ কলামগুলি তখন পুনরায় আকার পরিবর্তনযোগ্য তবে প্রাথমিক প্রস্থগুলি সমস্তই ভুল। আমাকে "ম্যানুয়ালি" কোডে কলামের প্রস্থগুলি সেট করার দরকার হতে পারে।
স্টুয়ার্ট হেলভিগ

ডিভি- গ্রিড.আউটো সাইজ কলমমোড = ডেটাগ্রিডভিউআউটো সাইজ কলম-> এস <- মোড.ফিল; (আপনি এটি মিস করেছেন, এটি বাম হাতের ও ডান হাতের কলমসড, যাতে আপনার সেই লাইনটি সংকলন করে না) অটোসাইজ করার জন্য ডাটাগ্রিডভিউ পাওয়ার কোডটি যেমন হয় তেমন বিরক্তিকর, তাই কমপক্ষে প্রথমে আপনার উত্তরটি পরীক্ষা করুন । এটি আপনি লিখেছেন এবং এটি ভুল প্রথম লাইন।
বারলপ

আপনার জবাবের জন্য @ বার্লপ ধন্যবাদ আপনার কাছে প্রশ্ন ও উত্তরগুলি সম্পাদনা করার সুযোগ রয়েছে। আপনি যদি আমার কোডটিতে ভুল দেখতে পান তবে সম্পাদনা করতে নির্দ্বিধায়।
যাহোফ

12

গ্রিডে ডেটা যুক্ত করার পরে নিম্নলিখিত কোড যুক্ত করুন যা প্রতিটি ঘরের ডেটার দৈর্ঘ্য অনুযায়ী কলামটি সামঞ্জস্য করবে

dataGrid1.AutoResizeColumns();            
dataGrid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

এখানে ফলাফল

এখানে চিত্র বর্ণনা লিখুন


9

আচ্ছা, আমি এটি এরকম করেছিলাম:

dgvReport.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
dgvReport.AutoResizeColumns();
dgvReport.AllowUserToResizeColumns = true;
dgvReport.AllowUserToOrderColumns = true;

যে নির্দিষ্ট ক্রমে। কলামগুলির আকার পরিবর্তন করা হয় (প্রসারিত) এবং পরে কলামগুলি পুনরায় আকার দিতে পারে।


6

আমি যদি প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনার যা প্রয়োজন তা পূরণ করার একটি সহজ উপায় থাকা উচিত। কল dgvSomeDataGrid.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

কৌতুক করা উচিত। তবে, সেখানে একটি সমস্যা রয়েছে কারণ আপনার ডেটাগ্রিডভিউ নিয়ন্ত্রণটি জনপ্রিয় করার পরে আপনি সরাসরি এই পদ্ধতিটি কল করতে পারবেন না। পরিবর্তে আপনাকে ভিজিবল চেঞ্জড ইভেন্টের জন্য একটি ইভেন্টহ্যান্ডলার যুক্ত করতে হবে এবং সেখানে পদ্ধতিটি কল করতে হবে।


1
এটি সামগ্রী অনুসারে কলামগুলির আকার পরিবর্তন করবে, তবে সমস্ত উপলব্ধ গ্রিড স্থান ব্যবহার করা হবে তা নিশ্চিত করবে না। অর্থাত্, বাকী কোনও স্থান থাকলে "পূরণ" করে না।
স্টুয়ার্ট হেলভিগ


4

প্রশ্নের পুনঃসূচনা:
কলামের প্রস্থটি কন্টেন্টের সাথে মানিয়ে নিন (কলাম জুড়ে বিভিন্ন পদ্ধতি সহ),
তবে তারপরে ব্যবহারকারীকে কলামের প্রস্থ সেট করার অনুমতি দিন ...

মিরোস্লাভ জাদ্রাভেকের উত্তর থেকে বিকাশ , আমার জন্য যা কাজ হয়েছিল তা অবিলম্বে অটোকে গণনার column.Widthজন্য সেট করা হয়েছিল ... column.Width!

foreach (DataGridViewColumn column in dataGridView.Columns)
{
    if (/*It's not your special column*/)
    {
        column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
        column.Width = column.Width; //This is important, otherwise the following line will nullify your previous command
        column.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;
    }
}

//Now do the same using Fill instead of AllCells for your special column

DataGridViewইতিমধ্যে তৈরি করা হয়, এই জাতীয় কৌশল ব্যবহার করে এটি কাজ করার জন্য পরীক্ষা করা হয় ।


আমি আপনার কোড হিসাবে একটি foreach ব্যবহার পছন্দ। যখন আপনার কাছে লুপের শীর্ষে কোনও গণিত না থাকে এটি এটিকে আরও পঠনযোগ্য করে তোলে। আমি সেভাবেই এটি করেছি এবং "কলাম। উইথথ = কলাম.উইথ;" মজাদার.
গ্রেগ বার্থ

4

এটি আমার জন্য আশ্চর্যজনক কাজ করেছে:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

1
সহজ সমাধান!
চিহ্ন ক্র্যাম

1
আমার জন্য কেবল তখনই নির্ধারিত হয়ে থাকে যদি তার পরে কোনওটির জন্য সেট না করা হয়, যেমনdataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
ডু-ডু-নতুন

3

এটি তাদের কন্টেন্ট অনুযায়ী সমস্ত কলামগুলি স্বতঃআযুক্ত করে, একটি নির্দিষ্ট কলাম প্রসারিত করে অবশিষ্ট খালি স্থানটি পূরণ করে এবং ভবিষ্যতের পুনরায় আকার দেওয়ার জন্য শেষ কলামটি সেট করে 'জাম্পিং' আচরণকে আটকায়।

// autosize all columns according to their content
dgv.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
// make column 1 (or whatever) fill the empty space
dgv.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
// remove column 1 autosizing to prevent 'jumping' behaviour
dgv.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
// let the last column fill the empty space when the grid or any column is resized (more natural/expected behaviour) 
dgv.Columns.GetLastColumn(DataGridViewElementStates.None, DataGridViewElementStates.None).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

আমি জানি এটি একটি পুরানো উত্তর, তবে কলামগুলির সংখ্যা আগে থেকে জানা না গেলেও আমি স্পষ্টভাবে কাজ করি।
নিলো পাইম

2

মিরোস্লাভ জাদ্রাভেকের কোড থেকে কিছুটা কলাম স্বল্পমাত্রায় নেওয়া হবে এমনটি ধরে রেখে কিছুটা কম সিটার কোড

for (int i = 0; i < dgvProblems.Columns.Count; i++)
{
    dgvProblems.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
    int colw = dgvProblems.Columns[i].Width;
    dgvProblems.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    dgvProblems.Columns[i].Width = colw;
}

2

মিরোস্লাভ জাদ্রাভেকের কোডটির আর একটি সংস্করণ, তবে কিছুটা বেশি স্বয়ংক্রিয় এবং সর্বজনীন:

    public Form1()
    {
        InitializeComponent();
        dataGridView1.DataSource = source;
        for (int i = 0; i < dataGridView1.Columns.Count - 1; i++) {
            dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
        }
        dataGridView1.Columns[dataGridView1.Columns.Count].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

    }

    void Form1Shown(object sender, EventArgs e)
    {
        for ( int i = 0; i < dataGridView1.Columns.Count; i++ )
        {
            int colw = dataGridView1.Columns[i].Width;
            dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
            dataGridView1.Columns[i].Width = colw;
        }
    }

আমি দ্বিতীয় অংশটি আলাদা ইভেন্টে রেখেছি, কারণ আমি datagridvewফর্মের প্রারম্ভিককরণটি পূরণ করি এবং উভয় অংশ থাকলে কিছুই পরিবর্তন হয় না, কারণ সম্ভবত অটোসাইজ প্রস্থ datagridviewপ্রদর্শিত হওয়ার পরে প্রস্থ গণনা করে , সুতরাং প্রস্থগুলি এখনও Form1()পদ্ধতিতে ডিফল্ট । এই পদ্ধতিটি শেষ করার পরে, অটোসাইজ তার কৌশলটি সম্পাদন করে এবং এর ঠিক পরে (যখন ফর্মটি প্রদর্শিত হয়) আমরা কোডের দ্বিতীয় অংশ (এখানে Form1Shownইভেন্টে) দ্বারা প্রস্থগুলি সেট করতে পারি । এটি আমার জন্য কবজির মতো কাজ করছে।


2

সি # তে মিরোস্লাভ জাদ্রাভেকের উত্তরের জন্য একটি সরল কোড এখানে দেওয়া হয়েছে:

CurrentDGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader;
for (int i = 0; i < dataGridView1.Columns.Count; i++) dataGridView1.Columns[i].Width = dataGridView1.Columns[i].Width;
CurrentDGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;

1

আপনি কি FillWeightনিজের DataGridViewColumnsবস্তুর সম্পত্তি সেট আপ করার চেষ্টা করেছিলেন ?

উদাহরণ স্বরূপ:

this.grid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
this.grid1.Columns[0].FillWeight = 1.5;

আমি মনে করি এটি আপনার ক্ষেত্রে কাজ করা উচিত।


1

স্কনাপলের সংস্করণ থেকে কিছুটা উন্নতি

int nLastColumn = dgv.Columns.Count - 1;
for (int i = 0; i < dgv.Columns.Count; i++)
{
    if (nLastColumn == i)
    {
        dgv.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    }
    else
    {
        dgv.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
    }
}

for (int i = 0; i < dgv.Columns.Count; i++)
{
    int colw = dgv.Columns[i].Width;
    dgv.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    dgv.Columns[i].Width = colw;
}


1

কলামের প্রস্থগুলি এর বিষয়বস্তুর সাথে মানিয়ে নেওয়ার জন্য নির্ধারিত বিবৃতিটি আমি ব্যবহার করেছি, এটি আমার সমস্যার সমাধান করেছে।

প্রথম ধাপ :

RadGridViewName.AutoSize = true;

দ্বিতীয় ধাপ :

// This mode  fit in the header text and column data for all visible rows. 
this.grdSpec.MasterTemplate.BestFitColumns();

তৃতীয় পদক্ষেপ:

for (int i = 0; i < grdSpec.Columns.Count; i++) 
{
    // The column width adjusts to fit the contents all cells in the control.
    grdSpec.Columns[i].AutoSizeMode = BestFitColumnMode.AllCells; 
}

1
foreach (DataGridViewColumn c in dataGridView.Columns)
    c.Width = c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, true);

এটি প্রদর্শিত হবে কিনা dataGridViewপ্রদর্শিত হবে (উদাহরণস্বরূপ শ্রেণি নির্মাতা থেকে ডাকলেও)।

একই পদ্ধতি, তবে সাথে DataGridViewAutoSizeColumnMode.DisplayedCells, উপরের ক্ষেত্রে স্পষ্ট কারণেই ব্যর্থ হয় - কোনও সেল এখনও প্রদর্শিত হয়নি! কিছু অ-সুস্পষ্ট কারণে, AutoResizeColumnsএই ক্ষেত্রেও ব্যর্থ হয়।


0

উদাহরণস্বরূপ আপনি যদি আপনার ডেটাসোর্সটিকে কোনও ডেটাটেবলের সাথে আবদ্ধ করেন তবে বাঁধাই শেষ হওয়ার পরে আপনাকে বৈশিষ্ট্যগুলি সেট করতে হবে:

        private void dgv_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
            dgv.AutoResizeColumns();
            dgv.AllowUserToResizeColumns = true;
        }

0
  • উপরে সমাধান করার জন্য ধন্যবাদ (মাধ্যমে পুনরুক্তি করতে DataGridView.Columns, পরিবর্তন AutoSizeModeও একটি বৈধ এক সংগ্রহ প্রস্থ মান এটি ফিরিয়ে পরিবর্তনের পর সেট AutoSizeModeথেকে DataGridViewAutoSizeColumnMode.None)।
  • আমি এটির সাথে লড়াই করেছি, এবং লক্ষ্য করেছি যে যখনই ক্লাস কনস্ট্রাক্টর বা কোনও লাইন থেকে Form.Show()বা এর আগে ডাকা হবে তখন এটি কাজ করবে না Form.ShowDialog()। সুতরাং আমি এই কোডটি স্নিপেট Form.Shownইভেন্টে রেখেছি এবং এটি আমার জন্য কাজ করে।
  • আমার রূপান্তরিত কোড, DataGridView.AutoSizeColumnsModeআগে যা কিছু সেট হোক না কেন আমি DataGridViewColumn.GetPreferredWidth()পরিবর্তনের পরিবর্তে ব্যবহার করি DataGridViewColumn.AutoSizeModeএবং প্রস্থের মানটি অবিলম্বে সেট করে দিই, তবে DataGridView.AutoSizeColumnsModeএকবার পরিবর্তন করুন :

    private void form_Shown(object sender, EventArgs e)
    {
            foreach (DataGridViewColumn c in dataGridView.Columns)
                c.Width = c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true);
            dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
    }
  • সেট করতে ভুলবেন না

            dataGridView.AllowUserToResizeColumns = true;
  • ফর্মটি দেখানোর পরে কীভাবে এটি কাজ করে তা আমি জানি না।


0

আমাকে এটি ভিবিতে করতে হয়েছিল এবং আমি এটি একটি মডিউলে রেখেছি এমন একটি পদ্ধতিতে এটি আলাদা করতে পছন্দ করি। আপনি যদি প্রয়োজন হয় তবে ফিল্ম কলামটিকে অন্য বাইফেরফের পরামিতি হিসাবে যুক্ত করতে পারেন।

''' <summary>
''' Makes all columns in a DataGridView autosize based on displayed cells,
''' while leaving the column widths user-adjustable.
''' </summary>
''' <param name="dgv">A DataGridView to adjust</param>
Friend Sub MakeAdjustableAutoSizedGridCols(ByRef dgv As DataGridView)
    Dim width As Integer

    For Each col As DataGridViewColumn In dgv.Columns
        col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        width = col.Width
        col.AutoSizeMode = DataGridViewAutoSizeColumnMode.None
        col.Width = width
    Next
    dgv.AllowUserToResizeColumns = True
End Sub

0

আপনি এরকম কিছু করতে পারেন:

   grd.DataSource = getDataSource();

    if (grd.ColumnCount > 1)
    {
        for (int i = 0; i < grd.ColumnCount-1; i++)
            grd.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

        grd.Columns[grd.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    }

    if (grd.ColumnCount==1)
        grd.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

সমস্ত কলামগুলি গ্রিডটি পূরণ করবে না শেষটি ব্যতীত সামগ্রীতে অভিযোজিত হবে।


0

PS অ্যারেটি পিএসকাস্টমঅবজেক্টের বিষয়বস্তু হওয়ায় এটি কাজ করে:

$dataGridView1.DataSource=[collections.arraylist]($array)
$dataGridView1.Columns | Foreach-Object{$_.AutoSizeMode = [System.Windows.Forms.DataGridViewAutoSizeColumnMode]::AllCells}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.