কীভাবে ডেটাটেবল কলামের ক্রম পরিবর্তন করবেন


92

সি # তে কীভাবে ডেটাবেবল কলামগুলি পরিবর্তন করতে হবে।

উদাহরণ:

am sql টেবিল টাইপ অর্ডার Qty, ইউনিট, আইডি তৈরি করা হয় কিন্তু প্রোগ্রামে ডেটা টেবিল অর্ডার হয় আইডি, Qty, ইউনিট। কোডের পিছনে সরাসরি স্কেল টেবিলের ধরণে ডাটাবেল পাস করুন যাতে সারণির ক্রম আলাদা হয়।

DataTable columns are: `Id,Qty,Unit.`  I want this to be: `Qty,Unit,Id` 

সাহায্য করুন


4
আপনি কেন কলাম ক্রম পরিবর্তন করতে চান তা ব্যাখ্যা করতে পারেন?
KBoek

am বর্ধিত এসকিউএল টেবিল টাইপ অর্ডার Qty,Unit,Id কিন্তু প্রোগ্রামে ডেটা টেবল অর্ডার হয় Id,Qty,Unit। কোডের পেছনে সরাসরি টেবিলের ধরণটি টেবিলের ধরণে ডেটা টেবিলটি সরাসরি পাস করুন যাতে টেবিলের ক্রমটি আলাদা হয় hats তবে কেন "কলামের ক্রম পরিবর্তন করতে হয়?"
ব্যাসদেব মেলাদেথ

6
ইতিমধ্যে ওপি উত্তর দিন।
খ্রিস্টান

উত্তর:


233

ব্যবহার করার চেষ্টা করুন ডেটা কলম.সেটঅর্ডিনাল পদ্ধতিটি । উদাহরণ স্বরূপ:

dataTable.Columns["Qty"].SetOrdinal(0);
dataTable.Columns["Unit"].SetOrdinal(1); 

আপডেট: এই উত্তরটি আমার প্রত্যাশার চেয়ে অনেক বেশি মনোযোগ পেয়েছে। বিভ্রান্তি এড়াতে এবং এর ব্যবহার আরও সহজ করার জন্য আমি ডেটা টেবেলে কলাম অর্ডার করার জন্য একটি এক্সটেনশন পদ্ধতি তৈরি করার সিদ্ধান্ত নিয়েছি:

সম্প্রসারণ পদ্ধতি:

public static class DataTableExtensions
{
    public static void SetColumnsOrder(this DataTable table, params String[] columnNames)
    {
        int columnIndex = 0;
        foreach(var columnName in columnNames)
        {
            table.Columns[columnName].SetOrdinal(columnIndex);
            columnIndex++;
        }
    }
}

ব্যবহার:

table.SetColumnsOrder("Qty", "Unit", "Id");

বা

table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});

আপনি যা বলেছিলেন তা দিয়ে, টেবিলের কাঠামোটি Qty,Id,Unit কেবলমাত্র পরিবর্তিত হয়েছিল I আমি এটি চাই Qty,Unit,Id
ব্যাসদেব মেলাদেথ

অবশ্যই, আপনার শেষটি ব্যতীত সমস্ত কলামের জন্য এই পদ্ধতিটি ব্যবহার করা উচিত।
ডিফল্ট লোকেল

4
উন্নত পদ্ধতির শরীর: var colIndex = 0; ফরচ (কলামনেমে ভ্যার কলনেম) টেবিল Col কলাম [কলমনাম]।
জোয়েলফ্যান

@ জোয়েলফ্যান আমি আমার উত্তর আপডেট করেছি, ধন্যবাদ! আপনার কোডটি অবশ্যই পরিষ্কার দেখায়।
ডিফল্ট লোকেল

4
খুব সহায়ক, tnx।
জোনাথানা

6

এটি "ডিফল্ট লোকাল" এর উত্তরের ভিত্তিতে তবে এটি অর্ডিনাল সেট করার আগে অবৈধ কলামের নামগুলি সরিয়ে ফেলবে। এর কারণ এটি যদি আপনি দুর্ঘটনাক্রমে একটি অবৈধ কলামের নাম পাঠান তবে এটি ব্যর্থ হবে এবং যদি আপনি এটি ব্যর্থ হওয়া থেকে রোধ করার জন্য একটি চেক রাখেন তবে সূচকটি ভুল হবে কারণ এটি যেখানে কোনও অবৈধ কলামের নাম প্রবেশ করানো হয়েছে সূচিগুলি এড়িয়ে যাবে।

public static class DataTableExtensions
{
    /// <summary>
    /// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first.
    /// </summary>
    /// <param name="table"></param>
    /// <param name="columnNames"></param>
    /// <remarks> http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order</remarks>
    public static void SetColumnsOrder(this DataTable dtbl, params String[] columnNames)
    {
        List<string> listColNames = columnNames.ToList();

        //Remove invalid column names.
        foreach (string colName in columnNames)
        {
            if (!dtbl.Columns.Contains(colName))
            {
                listColNames.Remove(colName);
            }
        }

        foreach (string colName in listColNames)
        {
            dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName));
        }
}

2

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


1

আপনার যদি ২-৩ টিরও বেশি কলাম SetOrdinalথাকে তবে যাওয়ার উপায় নয় । ডেটাভিউয়ের ToTableপদ্ধতিটি কলামের নামের একটি প্যারামিটার অ্যারে গ্রহণ করে। সেখানে আপনার কলামগুলি অর্ডার করুন:

DataView dataView = dataTable.DefaultView;
dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");

0

কলাম সূচী পরিবর্তন করার জন্য আমরা এই পদ্ধতিটি ব্যবহার করতে পারি তবে দু'র বেশি সংখ্যক কলাম থাকলে সমস্ত কলামে প্রয়োগ করা উচিত অন্যথায় এটি ডেটা টেবিল থেকে সমস্ত অপ্রয়োজনীয় মানগুলি প্রদর্শন করবে ............ ........


-3

কিছু শর্ত বা চেক বাক্সের উপর ভিত্তি করে ডেটা টেবিলটিকে পুনরায় অর্ডার করুন checked পিএফবি: -

 var tableResult= $('#exampleTable').DataTable();

    var $tr = $(this).closest('tr');
    if ($("#chkBoxId").prop("checked")) 
                    {
                        // re-draw table shorting based on condition
                        tableResult.row($tr).invalidate().order([colindx, 'asc']).draw();
                    }
                    else {
                        tableResult.row($tr).invalidate().order([colindx, "asc"]).draw();
                    }

প্রশ্নটি মনোযোগ সহকারে পড়ুন। উপরের ক্যোয়ারী সি # এর জন্য নয় জিকিউরির জন্য
আহমদ মুখতার

4
এই উত্তরটি কেবল ভুল ভাষার জন্য নয়, প্রশ্নটি ছিল কলামগুলি সারি বাছাই না করার আদেশ দেওয়ার জন্য। আপনি এই উত্তরটি কীভাবে পৌঁছেছেন, এর গৃহীত উত্তরের 8 বছরেরও বেশি সময় পরে? কেন?
jreed121
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.