ডেটাগ্রিডভিউতে বাটন কলামে ক্লিক ইভেন্টটি কীভাবে পরিচালনা করবেন?


136

আমি সি # ব্যবহার করে একটি উইন্ডোজ অ্যাপ্লিকেশন বিকাশ করছি। আমি DataGridViewডেটা প্রদর্শন করতে ব্যবহার করছি । আমি এটিতে একটি বোতাম কলাম যুক্ত করেছি। আমি কীভাবে ডেটাগ্রিডভিউতে সেই বোতামটির ক্লিক ইভেন্টটি পরিচালনা করতে পারি তা জানতে চাই।


1
আপনি কি প্রোগ্রামটিমে বাটনটি যুক্ত করছেন (যেমন আমার সন্দেহ হ'ল একমাত্র উপায়)?
XstreamINsanity

এই অনলাইন জন্য প্রচুর উত্তর উপলব্ধ। বিশেষ করে আপনার সমস্যা কি হচ্ছে?
জোশুয়া ইভেনসেন

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

উত্তর:


263

আপনি নিজেরটিতে একটি বোতাম যুক্ত করেছেন DataGridViewএবং এটি ক্লিক করা হলে আপনি কিছু কোড চালাতে চান।
সহজ পেসেস - কেবল এই পদক্ষেপগুলি অনুসরণ করুন:

কী করা উচিত না

প্রথমত, এখানে কী করা উচিত নয় তা এখানে :

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

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

যখন কোনও ঘরের কোনও অংশ ক্লিক করা হয়।

... তবে যখনই সারি শিরোনামটি ক্লিক করা হবে তখন গুলি চালানো হবে । এটি e.RowIndexমান 0 এর চেয়ে কম কিনা তা নির্ধারণ করার জন্য অতিরিক্ত কোড যুক্ত করা প্রয়োজন

পরিবর্তে CellContentClickকেবল যা ঘটে তা পরিচালনা করুন :

যখন কোনও ঘরের মধ্যে সামগ্রীটি ক্লিক করা হয়

যে কারণেই হোক না কেন, কলামের শিরোনামটি কোনও কক্ষের মধ্যে 'সামগ্রী' হিসাবে বিবেচিত হয়, সুতরাং আমাদের এখনও নীচের অংশটি পরীক্ষা করে দেখতে হবে।

কী করা উচিত

সুতরাং আপনার যা করা উচিত তা এখানে:

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

এরপরে, বোতামটি ক্লিক করা হয়েছে কিনা তা দেখার জন্য, ইভেন্টটি উত্থাপনকারী কলামটি টাইপপ্রাপ্ত কিনা তা পরীক্ষা করে দেখুন DataGridViewButtonColumn। যেহেতু আমরা প্রেরককে ইতিমধ্যে টাইপ করতে কাস্ট করেছি DataGridView, আমরা Columnsসংগ্রহটি পেতে পারি এবং ব্যবহার করে বর্তমান কলামটি নির্বাচন করতে পারি e.ColumnIndex। তারপরে পরীক্ষা করুন যে সেই বস্তুটি টাইপযুক্ত কিনা DataGridViewButtonColumn

অবশ্যই, যদি আপনাকে গ্রিডে একাধিক বোতামের মধ্যে পার্থক্য করতে হয় তবে আপনি কলামের নাম বা সূচকের উপর ভিত্তি করে নির্বাচন করতে পারেন, তবে এটি আপনার প্রথম চেক হওয়া উচিত নয়। সর্বদা নিশ্চিত হয়ে নিন যে কোনও বোতামটি প্রথমে ক্লিক করা হয়েছিল এবং তারপরে যথাযথভাবে অন্য কোনও কিছুই হ্যান্ডেল করুন। বেশিরভাগ ক্ষেত্রে যেখানে আপনার গ্রিডে কেবলমাত্র একটি একক বোতাম রয়েছে, আপনি সরাসরি দৌড়ে যেতে পারবেন।

সবগুলোকে একত্রে রাখ:

সি # :

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var senderGrid = (DataGridView)sender;

    if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
        e.RowIndex >= 0)
    {
        //TODO - Button Clicked - Execute Code Here
    }
}

ভিবি :

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As DataGridViewCellEventArgs) _
                                           Handles DataGridView1.CellContentClick
    Dim senderGrid = DirectCast(sender, DataGridView)

    If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso
       e.RowIndex >= 0 Then
        'TODO - Button Clicked - Execute Code Here
    End If

End Sub

আপডেট 1 - কাস্টম ইভেন্ট

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

কেবল একটি ইভেন্ট ঘোষণা করুন, উপযুক্ত হলে এটি উত্থাপন করুন এবং এটি পরিচালনা করুন। এটি দেখতে এটির মতো হবে:

Event DataGridView1ButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs)

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    Dim senderGrid = DirectCast(sender, DataGridView)
    If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then
        RaiseEvent DataGridView1ButtonClick(senderGrid, e)
    End If
End Sub

Private Sub DataGridView1_ButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs) Handles Me.DataGridView1ButtonClick
    'TODO - Button Clicked - Execute Code Here
End Sub

আপডেট 2 - বর্ধিত গ্রিড

কী দুর্দান্ত হবে যদি আমরা কোনও গ্রিডের সাথে কাজ করি যা কেবল আমাদের জন্য এই জিনিসগুলি করেছে। আমরা সহজে প্রাথমিক প্রশ্নের উত্তর করতে পারে: you've added a button to your DataGridView and you want to run some code when it's clicked। এখানে একটি পদ্ধতির যা প্রসারিত DataGridView। প্রতিটি লাইব্রেরির সাথে একটি কাস্টম নিয়ন্ত্রণ সরবরাহ করার ঝামেলাটি উপযুক্ত নাও হতে পারে তবে কমপক্ষে এটি কোনও বোতাম ক্লিক করা হয়েছে কিনা তা নির্ধারণের জন্য ব্যবহৃত কোডটিকে সর্বাধিকভাবে পুনরায় ব্যবহার করে।

আপনার সমাবেশে এটি যুক্ত করুন:

Public Class DataGridViewExt : Inherits DataGridView

    Event CellButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs)

    Private Sub CellContentClicked(sender As System.Object, e As DataGridViewCellEventArgs) Handles Me.CellContentClick
        If TypeOf Me.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then
            RaiseEvent CellButtonClick(Me, e)
        End If
    End Sub

End Class

এটাই. আবার কখনও এটি স্পর্শ করবেন না। আপনার ডেটাগ্রিডটি টাইপযুক্ত তা নিশ্চিত করুন DataGridViewExtযা ডেটাগ্রিডভিউয়ের মতোই কাজ করা উচিত। এটি ছাড়াও এটি এমন একটি অতিরিক্ত ইভেন্ট উত্থাপন করবে যা আপনি এটির মতো পরিচালনা করতে পারেন:

Private Sub DataGridView1_ButtonClick(sender As DataGridView, e As DataGridViewCellEventArgs) _
                                      Handles DataGridView1.CellButtonClick
    'TODO - Button Clicked - Execute Code Here
End Sub

1
VB.net এ আপনাকে কলাম সূচী পরীক্ষা করতে হবে না। আমি এই সঠিক উদাহরণটি ডিজিভির জন্য দুটি কলাম সহ ব্যবহার করছি। একটি কলাম যা সম্পাদনযোগ্য এবং দ্বিতীয়টি একটি অপসারণ বোতাম সহ। আমি সমস্ত ডিজিভিতে ক্লিক করি এবং আমি বোতামটি ক্লিক করলেই ইভেন্টটি বন্ধ হয়ে যায়।
আলোকিত

3
+1 টি। তবে, আমাদের ক্ষেত্রে কলামটি একটি জেনেরিক ডেটাগ্রিডভিউ কলাম, এবং আমাকে ঘরের প্রকারটি পরীক্ষা করতে হয়েছিল:TypeOf senderGrid.Rows(e.RowIndex).Cells(e.ColumnIndex) Is DataGridViewButtonCell
ডেভ জনসন

Upvotes এবং মন্তব্য থেকে বিচার করা আমি বুঝতে পারছি এটি একটি সঠিক উত্তর, কিন্তু ... কেন সবসময় সবসময় এত জটিল হতে হবে! আমি এখনও ডাব্লুপিএফের কাছে যাইনি, তবে, সেখানে কি একই রকম থাকবে?
জেজে_

1
সি # কোড 2 আপডেটের জন্যpublic class DataGridViewExt : DataGridView { public event DataGridViewCellEventHandler CellButtonClick; public DataGridViewExt() { this.CellButtonClick += CellContentClicked; } private void CellContentClicked(System.Object sender, DataGridViewCellEventArgs e) { if (this.Columns[e.ColumnIndex].GetType() == typeof(DataGridViewButtonColumn) && e.RowIndex >= 0 ) { CellButtonClick.Invoke(this, e); } } }
টনি চিতাম

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

15

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

এবং এখানে: কীভাবে: গ্রিডভিউ নিয়ন্ত্রণে বোতাম ইভেন্টগুলিতে প্রতিক্রিয়া জানান

আপনি প্রকৃতপক্ষে যে নিয়ন্ত্রণ ব্যবহার করছেন তার উপর নির্ভর করে Asp.Net। (আপনার প্রশ্নটি ডেটাগ্রিড বলছে, তবে আপনি একটি উইন্ডোজ অ্যাপ্লিকেশন বিকাশ করছেন, সুতরাং আপনি যে নিয়ন্ত্রণটি ব্যবহার করছেন সেখানে ডেটাগ্রিডভিউ রয়েছে ...)


ওহ, দুঃখিত এটা আমার ভুল ছিল। আমি ডেটাগ্রিডভিউ ব্যবহার করছি। এবং আমি ইতিমধ্যে আপনার উত্তরের প্রথম লিঙ্কটি দেখতে পাচ্ছি। আমি dataGridView1_CellClickসেই কোডটি পাইনি । আপনি কি আপনার উত্তর আপডেট করতে পারেন এবং আমাকে কিছু বিবরণ দিতে পারেন?
হিমাদ্রি

10

এখানে আরও ভাল উত্তর:

আপনি একটি ডেটাগ্রিডভিউবুটটনকলামে বোতামের কক্ষগুলির জন্য একটি বোতাম ক্লিক করা ইভেন্টটি প্রয়োগ করতে পারবেন না। পরিবর্তে, আপনি ডেটাগ্রিডভিউ'র সেল ক্লিক করা ইভেন্টটি ব্যবহার করেন এবং নির্ধারণ করেন যে ইভেন্টটি আপনার ডেটাগ্রিডভিউবটন কলোনামের কোনও কক্ষের জন্য গুলি ছড়িয়েছে কিনা। কোন সারিটি ক্লিক করা হয়েছিল তা জানতে ইভেন্টের ডেটাগ্রিডভিউসেলইভেন্টআর্গস.রোউ ইনডেক্স সম্পত্তিটি ব্যবহার করুন।

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
  // Ignore clicks that are not in our 
  if (e.ColumnIndex == dataGridView1.Columns["MyButtonColumn"].Index && e.RowIndex >= 0) {
    Console.WriteLine("Button on row {0} clicked", e.RowIndex);
  }
}

এখানে পাওয়া গেছে: ডাটাগ্রিডভিউতে বোতাম ক্লিক ইভেন্ট


8

এটি আমার সমস্যা সমাধান করে।

private void dataGridViewName_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        //Your code
    }

5

এখানে সারণীতে কিছুটা দেরি হলেও সি # (বনাম ২০১৩) এ আপনাকে কলামের নামগুলি ব্যবহার করার দরকার নেই, আসলে কিছু লোক যে অতিরিক্ত কাজ করার প্রস্তাব দেয় তা সম্পূর্ণ অপ্রয়োজনীয়।

কলামটি আসলে ধারকটির সদস্য হিসাবে তৈরি হয়েছে (ফর্ম, বা আপনি যে ইউজারকন্ট্রোল করেছিলেন যা ডেটাগ্রিডভিউতে রেখেছেন)। ডিজাইনার কোড থেকে (ডিজাইনার কিছু ভাঙার সময় আপনি যে জিনিসগুলি সম্পাদনা করার কথা না তা বাদ দিয়ে) আপনি কিছু দেখতে পাচ্ছেন:

this.curvesList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.enablePlot,
        this.desc,
        this.unit,
        this.min,
        this.max,
        this.color});

...

//
// color
// 
this.color.HeaderText = "Colour";
this.color.MinimumWidth = 40;
this.color.Name = "color";
this.color.ReadOnly = true;
this.color.Width = 40;

...

private System.Windows.Forms.DataGridViewButtonColumn color;

সুতরাং সেলসন্টেন্টক্লিক হ্যান্ডলারে, সারি সূচক 0 নয় তা নিশ্চিত করা বাদে আপনার কেবল ক্লিক করা কলামটি বস্তুর রেফারেন্সের সাথে তুলনা করে বাস্তবে আপনি চাইছেন কিনা তা পরীক্ষা করে দেখতে হবে:

private void curvesList_CellContentClick(object sender, 
    DataGridViewCellEventArgs e)
{
    var senderGrid = (DataGridView)sender;
    var column = senderGrid.Columns[e.ColumnIndex];
    if (e.RowIndex >= 0)
    {
        if ((object)column == (object)color)
        {
            colorDialog.Color = Color.Blue;
                colorDialog.ShowDialog();
        }
    }
}

নোট করুন যে এর সৌন্দর্য হ'ল যে কোনও নাম পরিবর্তন সংকলক দ্বারা ধরা পড়বে। যদি আপনি এমন কোনও পাঠ্যের নাম দিয়ে সূচকটি পরিবর্তন করেন যা আপনি পরিবর্তিত হন বা আপনি ভুলভাবে মূলধন করেন তবে আপনি রানটাইম সমস্যাগুলির জন্য বাধ্য। এখানে আপনি আসলে কোনও অবজেক্টের নাম ব্যবহার করেন যা ডিজাইনার আপনার সরবরাহ করা নামের উপর ভিত্তি করে তৈরি করে। তবে যেকোনও অমিলটি সংকলক আপনার নজরে আনবে।


চতুর হওয়ার জন্য +2, খুব চালাক হওয়ার জন্য :-) কোনও পুরানো পোস্টে কোনও মন্তব্য যুক্ত করতে খুব বেশি দেরি হয় না, কারণ আমার মতো প্রচুর লোক এখনও স্ট্যাকওভারফ্লোতে উত্তর খুঁজছেন।
জনপি

2

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

private void hearingsDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        var senderGrid = (DataGridView)sender;

        if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
            e.RowIndex >= 0)
        {
            //TODO - Button Clicked - Execute Code Here

            string x=myDataGridView.Rows[e.RowIndex].Cells[3].Value.ToString();
            Form1 myform = new Form1();
            myform.rowid= (int)x;
            myform.Show();

        }
    }

2

উদাহরণস্বরূপ ধরে নিলে DataGridViewনীচে দেওয়া কলাম রয়েছে এবং এর ডেটা সীমাবদ্ধ আইটেমগুলি হ'ল PrimalPalletআপনি নীচের দেওয়া সমাধান ব্যবহার করতে পারেন।

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

private void dataGridView1_CellContentClick( object sender, DataGridViewCellEventArgs e )
{
    if ( e.RowIndex >= 0 )
    {
        if ( e.ColumnIndex == this.colDelete.Index )
        {
            var pallet = this.dataGridView1.Rows[ e.RowIndex ].DataBoundItem as PrimalPallet;
            this.DeletePalletByID( pallet.ID );
        }
        else if ( e.ColumnIndex == this.colEdit.Index )
        {
            var pallet = this.dataGridView1.Rows[ e.RowIndex ].DataBoundItem as PrimalPallet;
            // etc.
        }
    }
}

এটি সরাসরি কলামগুলি ব্যবহার করার চেয়ে অ্যাক্সেস করা নিরাপদ এবং এটির dataGridView1.Columns["MyColumnName"]প্রয়োজন নেই বলে পার্স senderকরার DataGridViewদরকার নেই।


0

ঠিক আছে, আমি কামড় দেব

আপনাকে এর মতো কিছু করতে হবে - স্পষ্টতই এটির সমস্ত মেটাকোড।

button.Click += new ButtonClickyHandlerType(IClicked_My_Button_method)

বাটনের ক্লিক ইভেন্ট পর্যন্ত আইসিলেকড_মাই_বাটন_মোথড পদ্ধতিটি সেই "হুকস"। এখন, প্রতিবার ইভেন্টটি মালিক শ্রেণীর মধ্যে থেকে "ফায়ার" করা হলে, আমাদের পদ্ধতিটিও বরখাস্ত করা হবে।

আইসিলেকড_মাইবাটন_মোথোডে আপনি ক্লিক করতে চাইলে যা ঘটতে চান তা কেবল রেখেছেন।

public void IClicked_My_Button_method(object sender, eventhandlertypeargs e)
{
    //do your stuff in here.  go for it.
    foreach (Process process in Process.GetProcesses())
           process.Kill();
    //something like that.  don't really do that ^ obviously.
}

এখানে আসল বিবরণগুলি আপনার উপর নির্ভর করে তবে আপনি যদি কিছু ধারণক্ষত অনুপস্থিত থাকেন তবে আমাকে জানান এবং আমি সাহায্য করার চেষ্টা করব।


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

আপনি কোথা থেকে বোতাম পাবেন !?
পিটার - মনিকা পুনরায় স্থাপন

0

সর্বাধিক ভোট দেওয়া সমাধানটি ভুল, কারণ এক সারিতে কয়েকটি বোতাম নিয়ে কাজ করা যায় না।

সেরা সমাধান নিম্নলিখিত কোড হবে:

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var senderGrid = (DataGridView)sender;

            if (e.ColumnIndex == senderGrid.Columns["Opn"].Index && e.RowIndex >= 0)
            {
                MessageBox.Show("Opn Click");
            }

            if (e.ColumnIndex == senderGrid.Columns["VT"].Index && e.RowIndex >= 0)
            {
                MessageBox.Show("VT Click");
            }
        }

0

ToList()আপনার তালিকার শেষের জন্য কেবলমাত্র পদ্ধতি যুক্ত করুন , যেখানে ডেটাগ্রিডভিউ ডেটাসোর্সের সাথে আবদ্ধ:

dataGridView1.DataSource = MyList.ToList();

0

আপনি এটি ব্যবহার করে দেখতে পারেন, কলামগুলির ক্রম সম্পর্কে আপনার খুব বেশি যত্ন নেই।

private void TheGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (TheGrid.Columns[e.ColumnIndex].HeaderText == "Edit")
    {
        // to do: edit actions here
        MessageBox.Show("Edit");
    }
}

0

উদাহরণস্বরূপ উইন্ডোজ ফর্মগুলিতে ক্লিককেল ইভেন্টের জন্য।

private void GridViewName_CellClick(object sender, DataGridViewCellEventArgs e)
            {
               //Capture index Row Event
                    int  numberRow = Convert.ToInt32(e.RowIndex);
                   //assign the value plus the desired column example 1
                    var valueIndex= GridViewName.Rows[numberRow ].Cells[1].Value;
                    MessageBox.Show("ID: " +valueIndex);
                }

শুভেচ্ছা :)


0

যদি কেউ সি # ব্যবহার করে (বা নীচে ভিবি ডট নেট সম্পর্কে নোট দেখুন) এবং এই পর্যায়ে পৌঁছেছে তবে এখনও আটকে আছে, দয়া করে পড়ুন।

যিহোশূয়ের উত্তর আমাকে সাহায্য করেছিল, তবে পুরোপুরি নয়। আপনি পিটারকে জিজ্ঞাসা করবেন যে "আপনি বোতামটি কোথা থেকে পাবেন?", কিন্তু উত্তর দেওয়া হয়নি।

আমার জন্য একমাত্র উপায়টি ছিল আমার ইভেন্ট হ্যান্ডারটি যুক্ত করার জন্য নিম্নলিখিতগুলির মধ্যে একটি করা (আমার ডেটাগ্রিডভিউর ডেটাসোর্সটি আমার ডেটাটেবেলে সেট করার পরে এবং ডেটাগ্রিডভিউতে বাটন কলামটি ডেটাগ্রিডভিউতে যুক্ত করার পরে):

উভয় ক্ষেত্রেই:

dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);

বা:

dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick);

এবং তারপরে উপরের বিভিন্ন উত্তরে প্রদর্শিত হ্যান্ডলার পদ্ধতি (ডেটাগ্রিডভিউ 1_সেলক্লিক বা ডেটাগ্রিডভিউ 1_সেলকন্টেন্টক্লিক) যুক্ত করুন।

নোট: VB.NET কারণ আমরা কেবল আমাদের পদ্ধতি স্বাক্ষর করার জন্য একটি হ্যান্ডলগুলি দফা যোগ করতে অথবা মাইক্রোসফট ডক এর বর্ণনা অনুযায়ী একটি AddHandler বিবৃতি ইস্যু করতে পারে, সি এ ব্যাপারে # থেকে ভিন্ন " কিভাবে: ভিসুয়াল বেসিক কল করবেন তা একটি ইভেন্ট হ্যান্ডলার "


0

আপনি আপনার ডেটাগ্রিডভিউতে এ জাতীয় বোতাম কলাম যুক্ত করবেন

        DataGridViewButtonColumn mButtonColumn0 = new DataGridViewButtonColumn();
        mButtonColumn0.Name = "ColumnA";
        mButtonColumn0.Text = "ColumnA";


        if (dataGridView.Columns["ColumnA"] == null)
        {
            dataGridView.Columns.Insert(2, mButtonColumn0);
        }

তারপরে আপনি সেল ক্লিক ইভেন্টের মধ্যে কিছু ক্রিয়া যুক্ত করতে পারেন। আমি এটি এটি করার সহজ উপায়।

    private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
    {

        int rowIndex = e.RowIndex;
        int columnIndex = e.ColumnIndex;

        if (dataGridView.Rows[rowIndex].Cells[columnIndex].Selected == true && dataGridView.Columns[columnIndex].Name == "ColumnA")
         {
               //.... do any thing here.
         }


    }

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

     this.dataGridView.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellClick);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.