VB.NET Datagridview'de sütunların görünen indexleri nasıl elde edilir?

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Arkadaşlar bir sorunum var bir formum var bunda bir tane DataGridView1 bir tane buton1 ve bir tane textbox DataGridView1'in içi bir access veri tabanından bilgilerle doldurulmuş durumda (Me.DataGridView1.DataSource = sanalCTablo) şeklinde DataGridView1'in özelliklerindende AllowUserToOrderColumns=True olacak istediğim şey bu DataGridView1'deki sütunları başlıklarından tutup sürükleyip istediğim yerde bırakmak ve ardından Button1'e bastığımda DataGridView1'de sütunlar hangi sıra ile dizilmiş ise bu görünen sütunların göründükleri şekliyle index numaralarını aralarına virgül koyup TextBox1'e yazdırmak hepsi bu kadar MERAK ETMEYİN SİZE KOD YAZDIRMIYCAM KODLARI BEN YAZDIM SADECE DÜZGÜN ÇALIŞMIYOR kodlarımda nerde hata var onu bulmanızı istiyorum sizden kodlarım aşağıda

Kod:
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim çıkandeğer As New System.Text.StringBuilder()

        For index As Integer = 0 To Me.DataGridView1.ColumnCount - 1
            çıkandeğer.Append(Me.DataGridView1.Columns(index).DisplayIndex.ToString() & ",")
        Next

        Dim yazıadedi As Integer = çıkandeğer.ToString().Length - 1
        Me.TextBox1.Text = çıkandeğer.ToString().Remove(yazıadedi, 1) ' En sonda kalan fazlalık virgülü siliyorum
    End Sub

ALTTAKİ KOD DOĞRU SONUCU ÜRETMİYOR DataGridView1'DE SÜTUNLARIN YERLERİNİ DEĞİŞTRİDİKTEN SONRA BUTONA BASIP TextBox1 İÇİNDE ÇIKAN SIRALAMAYA BAKTIĞIMDA DataGridView1'DE GÖRDÜĞÜM SÜTUN SIRALAMASIYLA UYUŞMUYOR UYUŞMASINI İSTİYORUM

Kod:
çıkandeğer.Append(Me.DataGridView1.Columns(index).DisplayIndex.ToString & ",")
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Arkadaşlar DataGridView'deki sütunları göründükleri sırada okuyup bana index numaralarını verecek kodu yazabilecek hiçkimse yokmu bu o kadar zormu bu
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=20751]Vatansever[/MENTION]:

Elde ettiğin sonuçları da paylaşabilir misin?
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
DataGridView1'de(kısaca dgv) görüntülenen sütunlara hiç dokunmadığım zaman elde ettiğim sonuç doğru burda bir problem yok sonuç. (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
index1 yani dgv'de görünen 2.ci sütunu başlığından sürükleyip dgv'de görünen 1.inci sütunun önüne bıraktığımda kodu çalıştırıyorum sonuç (1,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25) bu sonuçta doğru çıkıyor herşey iyi güzel yanyana olan sütunların yerini değiştirince sorunsuz çalışıyor gibi görünüyor ama birkaç sütun ötede bulunanlarla oynadığımda herşey anormalleşiyor sonuçlar anormal mesela dgv'de görünen 3.üncü sutunu sürükleyip ilk sütunun önüne bıraktığımda çıkan sonuç (1,2,0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25) halbuki dgv'de gördüğüm sıralamaya göre sonucun aşağıdaki gibi olması lazım
(2,0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25) işte problemim bu kodu okadar inceledim bir hatayı ben göremedim ama sonuçlar doğru çıkmıyor yani yan yana olan sütunlar yer değiştirince sonuçlar düzgün çıkıyor gibi görünüyor ama yanyana olmayan sütunların yerini değiştirdiğimde sonuçlar anormal çıkıyor
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=20751]Vatansever[/MENTION]:

Daha önce böyle bir çalışmam olmadı. Mantık yürüterek cevap vermeye çalışayım, belki faydası olur.

5 sütunlu DGV olsun.

0 (id), 1(adi), 2(soyadi), 3(e-posta), 4(şehir)

2 no'lu sütunu, 0 no'lu sütunun önüne getirmek istiyorum. Yani

2(soyadi), 0(id), 1(adi), 3(e-posta), 4(şehir)

görüntüsünü elde etmeye çalışıyorum.

Anladığım kadarıyla, bu hareket ettirmede bir problem yok. Görsel olarak 2 no'lu sütun en başa yerleşiyor. Sanıyorum, DGV sütun sıralamasını yeniden düzenliyor ve şöyle değiştiriyor:

0 (id), 1(adi), 2(soyadi), 3(e-posta), 4(şehir) <-- Başlangıç
2(soyadi), 0(id), 1(adi), 3(e-posta), 4(şehir) <-- Beklenen
0(soyadi), 1(id), 2(adi), 3(e-posta), 4(şehir) <-- DGV davranışı

DisplayIndex yerine column-Name veya column-ID gibi bir başka property ile ismine odaklanmak problemi çözer diye düşünüyorum.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Dediğini yapmıştım ama olmuyor çünkü colums(?) ?= değeri index değeri oluyor dgv'deki colums sıra değeri olmuyor (sıra olsaydı problemi çözmüş olurdum zaten) bu nedenle sütunların sırasını istediğin kadar değiştir çıkan sonuç hep aynı oluyor (dgv'ye bilgileri aktarmakta kullandığım access dosyasındaki sütunlar hangi sıralamadaysa colums adlarının sıralamasıda aynı oluyor sıralama hiç değişmiyor)

Kod:
For i As Integer = 0 To Me.DataGridView1.ColumnCount - 1
            çıkandeğer.Append(Me.DataGridView1.Columns(i).Name & ",")
Next
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
@Vatansever:

Basit bir form hazırladım. Üzerinde oynuyorum. Yeniden-dizilim algoritmasını çözmeye çalışıyorum. MSDN'de de tanımı yapılmamış. Sadece:

When you change the DisplayIndex value for a column, the DisplayIndex values for
other columns are changed to reflect the new order​
.

açıklaması var. Hazırladığım örneği çalıştıracak olursan, 0-1 sütunlarının yer değiştirmesi ile 0-4 sütunlarının yer değiştirmesi sırasında aradaki fark + 1 kadar döngüye giriyor. DisplayIndex değerleri neye göre değişiyor, tam olarak çözemedim.

Not: Kod C# diline ait. Bu dilde:

gridMain.Columns[i].DisplayIndex kullanılabildiği gibi
gridMain.Columns["ColumnName"].DisplayIndex olarak da kullanılabiliyor. VB.NET takımı da bu kullanımı eklemiş olabilir. (i) yerine [""] kullanımı işine yararsa, deneyebilirsin.


Form1.cs

Kod:
using System;
using System.Windows.Forms;


namespace DataGridView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();


            gridMain.AutoGenerateColumns = false;
        }


        private void gridMain_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e)
        {
            for (int i = 0; i < gridMain.Columns.Count; i++)
            {
                textBox1.Text += gridMain.Columns[i].DisplayIndex + ", ";
            }


            textBox1.Text += Environment.NewLine;
        }
    }
}

Form1.designer.cs

Kod:
namespace DataGridView
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;


        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }


        #region Windows Form Designer generated code


        private void InitializeComponent()
        {
            this.gridMain = new System.Windows.Forms.DataGridView();
            this.clmnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.clmnName = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.clmnSurname = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.clmnEMail = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.clmnDistrict = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.textBox1 = new System.Windows.Forms.TextBox();
            ((System.ComponentModel.ISupportInitialize)(this.gridMain)).BeginInit();
            this.SuspendLayout();
            // 
            // gridMain
            // 
            this.gridMain.AllowUserToOrderColumns = true;
            this.gridMain.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.gridMain.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.gridMain.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.clmnID,
            this.clmnName,
            this.clmnSurname,
            this.clmnEMail,
            this.clmnDistrict});
            this.gridMain.Location = new System.Drawing.Point(12, 12);
            this.gridMain.Name = "gridMain";
            this.gridMain.Size = new System.Drawing.Size(472, 284);
            this.gridMain.TabIndex = 0;
            this.gridMain.ColumnDisplayIndexChanged += new System.Windows.Forms.DataGridViewColumnEventHandler(this.gridMain_ColumnDisplayIndexChanged);
            // 
            // clmnID
            // 
            this.clmnID.HeaderText = "ID";
            this.clmnID.Name = "clmnID";
            // 
            // clmnName
            // 
            this.clmnName.HeaderText = "Adi";
            this.clmnName.Name = "clmnName";
            // 
            // clmnSurname
            // 
            this.clmnSurname.HeaderText = "Soyadi";
            this.clmnSurname.Name = "clmnSurname";
            // 
            // clmnEMail
            // 
            this.clmnEMail.HeaderText = "E-Posta";
            this.clmnEMail.Name = "clmnEMail";
            // 
            // clmnDistrict
            // 
            this.clmnDistrict.HeaderText = "Şehir";
            this.clmnDistrict.Name = "clmnDistrict";
            // 
            // textBox1
            // 
            this.textBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
            this.textBox1.Location = new System.Drawing.Point(0, 302);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(496, 172);
            this.textBox1.TabIndex = 1;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(496, 474);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.gridMain);
            this.Name = "Form1";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "Form1";
            ((System.ComponentModel.ISupportInitialize)(this.gridMain)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();


        }


        #endregion


        private System.Windows.Forms.DataGridView gridMain;
        private System.Windows.Forms.DataGridViewTextBoxColumn clmnID;
        private System.Windows.Forms.DataGridViewTextBoxColumn clmnName;
        private System.Windows.Forms.DataGridViewTextBoxColumn clmnSurname;
        private System.Windows.Forms.DataGridViewTextBoxColumn clmnEMail;
        private System.Windows.Forms.DataGridViewTextBoxColumn clmnDistrict;
        private System.Windows.Forms.TextBox textBox1;
    }
}
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
O dediğinide denedim columns(sayı) yada columns(sütunadı) girmekte aynı sonucu üretiyor ikiside aynı bir fark yaratmıyor
HTML:
        Dim çıkandeğer As New System.Text.StringBuilder()
        Dim liste As New List(Of String) ' SÜTUN ADLARINI BUNA DOLDURUYORUM

        ' BURDA LİSTEYE ACCESS'TEKİ SÜTUN ADLARINI EKLİYORUM
        For i As Integer = 0 To Me.DataGridView1.ColumnCount - 1
            liste.Add(Me.DataGridView1.Columns(i).Name)
        Next

        'BURDA SÜTUN ADLARININ GÖRÜNTÜLENDİĞİ DİSPLAYİNDEX'LERİNİ ÇIKANDEĞER'E EKLİYORUM
        For ii As Integer = 0 To Me.DataGridView1.ColumnCount - 1
            çıkandeğer.Append(Me.DataGridView1.Columns(liste(ii)).DisplayIndex & ",")
        Next

        ' BURDADA ÇIKAN DEĞERİ TEXTBOX1'E YAZDIRIYORUM
        Dim yazıadedi As Integer = çıkandeğer.ToString().Length - 1
        Me.TextBox1.Text = çıkandeğer.ToString().Remove(yazıadedi, 1)
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=20751]Vatansever[/MENTION]:

Şöyle bir örnek var. İşine yarar umarım.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Verdiğin örneği indirdim sonra bakıcam ama ilk görünüşte anladığım sütun sıraları kaydedilip formload'dada kaydedildiği şekliyle yüklüyor benim kodumdada bunu hatasız bir şekilde zaten yapabiliyorsun bu konuda problem yok ama benim projemde bu işlevi başka yere bağlayıp senkronize etmem lazım bu yüzden doğru sıralamayı elde etmeye ihtiyacım var....
Alttaki verdiğim kodda çıkan index değerlerine göre sütunları dizme kodu kod düzgün çalışıyor
Kod:
 Dim sayılar As String = Me.TextBox1.Text
        Dim SütunSıraListesiArray() As String
        SütunSıraListesiArray = sayılar.Split(",")
        For sıra As Integer = 0 To SütunSıraListesiArray.Length - 1
            Dim index As Integer = Convert.ToInt32(SütunSıraListesiArray(sıra))
            Me.DataGridView1.Columns(sıra).DisplayIndex = index
        Next
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=20751]Vatansever[/MENTION]:

Kızma, darılma, gücenme... VB.NET denilince bi' geriliyorum (kendimi program yazmaktan çok roman yazarken buluyorum). DataGridView denilince daha bi' geriliyorum.

Çok özür dilerim. Başka bi' konu olsa pes etmem ama DataGridView konusunda benden pes. :(
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Arkadaşlar datagridlerin sütunlarını başlık kısmından tutup sürükleyince sıralamaları değiştiriyoruz değiştridikten sonra Datagrid'te bulunan sütun sıralamasının nasıl olduğunu nasıl öğrenicez bilen kimse yokmu ama index no olur ama sütun adı olur yeterki Datagrid'de ki görünen sütun sıralamasını elde etmek istiyorum.......
 

SerdarGokcen

Asistan
Katılım
7 Nisan 2012
Mesajlar
400
Reaksiyon puanı
3
Puanları
0
Form1.vb kodu:
Public Class Form1
''' <summary>
''' görünen sıralama listesi
''' </summary>
''' <remarks></remarks>
Dim gorunenListe As List(Of Sirala)


''' <summary>
''' İlk görüntüleme listesi
''' </summary>
''' <remarks></remarks>
Dim ilkListe As List(Of Sirala)


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load


ilkListe = New List(Of Sirala)
gorunenListe = New List(Of Sirala)


For Each col As DataGridViewColumn In Me.DataGridView1.Columns
Dim a As New Sirala()
a.DisplayIndex = col.DisplayIndex
a.Index = col.Index
ilkListe.Add(a)
Next


For Each col As DataGridViewColumn In Me.DataGridView1.Columns
Dim a As New Sirala()
a.DisplayIndex = col.DisplayIndex
a.Index = col.Index
gorunenListe.Add(a)
Next


Me.DataGridView1.AutoGenerateColumns = False


'TODO: This line of code loads data into the 'MtbDataSet.tbl_FaxGonderimi' table. You can move, or remove it, as needed.
Me.Tbl_FaxGonderimiTableAdapter.Fill(Me.MtbDataSet.tbl_FaxGonderimi)


End Sub


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


'görünen listeyi sıfırla
gorunenListe.Clear()


'görünen listeyi yaz.
For Each col As DataGridViewColumn In Me.DataGridView1.Columns
Dim a As New Sirala()
a.DisplayIndex = col.DisplayIndex
a.Index = col.Index
gorunenListe.Add(a)
Next
End Sub


Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click


'sıralamayı geri al.
For Each s As Sirala In gorunenListe
Me.DataGridView1.Columns(s.Index).DisplayIndex = s.DisplayIndex
Next
End Sub
End Class


''' <summary>
''' Sıralama Yapısı
''' </summary>
''' <remarks></remarks>
Public Structure Sirala
Public _index As Integer
Public _dispIndex As Integer


''' <summary>
''' Sütunun yerleşim indexi(Columns içindeki)
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Index As Integer
Get
Return _index
End Get
Set(ByVal value As Integer)
_index = value
End Set
End Property


''' <summary>
''' Sütunun görünen indexi
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property DisplayIndex As Integer
Get
Return _dispIndex
End Get
Set(ByVal value As Integer)
_dispIndex = value
End Set
End Property


End Structure










Form1.designer.vb kodu:


<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form


'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub


'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer


'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.DataGridView1 = New System.Windows.Forms.DataGridView()
Me.MtbDataSet = New WindowsApplication1.mtbDataSet()
Me.TblFaxGonderimiBindingSource = New System.Windows.Forms.BindingSource(Me.components)
Me.Tbl_FaxGonderimiTableAdapter = New WindowsApplication1.mtbDataSetTableAdapters.tbl_FaxGonderimiTableAdapter()
Me.FaxIDDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.GonderMIDDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.TransactionIDDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.SubmitTimeDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.CompletionTimeDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.UserIDDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.DataDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Button1 = New System.Windows.Forms.Button()
Me.Button2 = New System.Windows.Forms.Button()
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.MtbDataSet, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TblFaxGonderimiBindingSource, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'DataGridView1
'
Me.DataGridView1.AllowUserToOrderColumns = True
Me.DataGridView1.AutoGenerateColumns = False
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.FaxIDDataGridViewTextBoxColumn, Me.GonderMIDDataGridViewTextBoxColumn, Me.TransactionIDDataGridViewTextBoxColumn, Me.SubmitTimeDataGridViewTextBoxColumn, Me.CompletionTimeDataGridViewTextBoxColumn, Me.UserIDDataGridViewTextBoxColumn, Me.DataDataGridViewTextBoxColumn})
Me.DataGridView1.DataSource = Me.TblFaxGonderimiBindingSource
Me.DataGridView1.Dock = System.Windows.Forms.DockStyle.Top
Me.DataGridView1.Location = New System.Drawing.Point(0, 0)
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.Size = New System.Drawing.Size(899, 150)
Me.DataGridView1.TabIndex = 0
'
'MtbDataSet
'
Me.MtbDataSet.DataSetName = "mtbDataSet"
Me.MtbDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema
'
'TblFaxGonderimiBindingSource
'
Me.TblFaxGonderimiBindingSource.DataMember = "tbl_FaxGonderimi"
Me.TblFaxGonderimiBindingSource.DataSource = Me.MtbDataSet
'
'Tbl_FaxGonderimiTableAdapter
'
Me.Tbl_FaxGonderimiTableAdapter.ClearBeforeFill = True
'
'FaxIDDataGridViewTextBoxColumn
'
Me.FaxIDDataGridViewTextBoxColumn.DataPropertyName = "FaxID"
Me.FaxIDDataGridViewTextBoxColumn.HeaderText = "FaxID"
Me.FaxIDDataGridViewTextBoxColumn.Name = "FaxIDDataGridViewTextBoxColumn"
Me.FaxIDDataGridViewTextBoxColumn.ReadOnly = True
'
'GonderMIDDataGridViewTextBoxColumn
'
Me.GonderMIDDataGridViewTextBoxColumn.DataPropertyName = "Gonder_MID"
Me.GonderMIDDataGridViewTextBoxColumn.HeaderText = "Gonder_MID"
Me.GonderMIDDataGridViewTextBoxColumn.Name = "GonderMIDDataGridViewTextBoxColumn"
'
'TransactionIDDataGridViewTextBoxColumn
'
Me.TransactionIDDataGridViewTextBoxColumn.DataPropertyName = "TransactionID"
Me.TransactionIDDataGridViewTextBoxColumn.HeaderText = "TransactionID"
Me.TransactionIDDataGridViewTextBoxColumn.Name = "TransactionIDDataGridViewTextBoxColumn"
'
'SubmitTimeDataGridViewTextBoxColumn
'
Me.SubmitTimeDataGridViewTextBoxColumn.DataPropertyName = "SubmitTime"
Me.SubmitTimeDataGridViewTextBoxColumn.HeaderText = "SubmitTime"
Me.SubmitTimeDataGridViewTextBoxColumn.Name = "SubmitTimeDataGridViewTextBoxColumn"
'
'CompletionTimeDataGridViewTextBoxColumn
'
Me.CompletionTimeDataGridViewTextBoxColumn.DataPropertyName = "CompletionTime"
Me.CompletionTimeDataGridViewTextBoxColumn.HeaderText = "CompletionTime"
Me.CompletionTimeDataGridViewTextBoxColumn.Name = "CompletionTimeDataGridViewTextBoxColumn"
'
'UserIDDataGridViewTextBoxColumn
'
Me.UserIDDataGridViewTextBoxColumn.DataPropertyName = "UserID"
Me.UserIDDataGridViewTextBoxColumn.HeaderText = "UserID"
Me.UserIDDataGridViewTextBoxColumn.Name = "UserIDDataGridViewTextBoxColumn"
'
'DataDataGridViewTextBoxColumn
'
Me.DataDataGridViewTextBoxColumn.DataPropertyName = "Data"
Me.DataDataGridViewTextBoxColumn.HeaderText = "Data"
Me.DataDataGridViewTextBoxColumn.Name = "DataDataGridViewTextBoxColumn"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(12, 156)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(147, 23)
Me.Button1.TabIndex = 1
Me.Button1.Text = "Sırılamayı Kaydet"
Me.Button1.UseVisualStyleBackColor = True
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(165, 156)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(147, 23)
Me.Button2.TabIndex = 1
Me.Button2.Text = "Eski Sıralamaya Geri Dön"
Me.Button2.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(899, 382)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.DataGridView1)
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.MtbDataSet, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TblFaxGonderimiBindingSource, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)


End Sub
Friend WithEvents DataGridView1 As System.Windows.Forms.DataGridView
Friend WithEvents MtbDataSet As WindowsApplication1.mtbDataSet
Friend WithEvents TblFaxGonderimiBindingSource As System.Windows.Forms.BindingSource
Friend WithEvents Tbl_FaxGonderimiTableAdapter As WindowsApplication1.mtbDataSetTableAdapters.tbl_FaxGonderimiTableAdapter
Friend WithEvents FaxIDDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents GonderMIDDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents TransactionIDDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents SubmitTimeDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents CompletionTimeDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents UserIDDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents DataDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button


End Class

Elle yazdım ve çok rahat çalışıyor.

sıralamayı değiştir datagridview den ve sıralamayı kaydet e tıkla.

sonra tekrar sıralamayı değiştir ve bu sefer eski sıralamaya geri dön butonuna tıkla. Kaydettiğin sıralama dönecek geri sana.

uzun süre vb.net yazmayınca structureyapısını unutmuşum.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Sanırım verdiğn kod sütun sıralamasını kaydet ve kaydedilmiş sıralamayı geri yükle kodu doğrumu eğer öyleyse sorumda belirtmiştim benim kodlardada bu sorunsuz çalışıyor yani burda problem yok sorun bu sütun sıralarını başka yerdede kullanıcam ama sıralamayı doğru elde etmem gerek bunu yapamıyorum mesela çok basit bir örnek vereyim



Bir form oluşturalım içine 2 adet DataGridView ekliyelim 1 adet'te Button1 ekliyelim
DataGridView1'i bir veri tabanına bağlıyalım burdaki bilgileri görüntülesin DataGridView2'yede sadece 1 adet sütun oluşturalım
DataGridView1'deki sürunların sıralamalarıyla oynıyalım ardından Button1'e basınca DataGridView1'deki sütunlar hangi sıralamada görünüyorsa DataGridView2'de bu sütunların isimlerini aynı sıralamada alt alta yazdıralım


İŞTE YAPAMADIĞIM ŞEY BU
 

zıppırık

Asistan
Katılım
5 Temmuz 2011
Mesajlar
433
Reaksiyon puanı
1
Puanları
0
DataGrıdView ı klonlayarak dgv2 ye aktarmayı deneyebılırsın.

.Clone()

Dgv de her kolonun .Tag propertisi varmı hatıriayamadım. Eger varsa sıra numaralarını .Tag propertisinde saklayarak dgv2 de ıslem yapabılırsın.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
DataGrıdView ı klonlayarak dgv2 ye aktarmayı deneyebılırsın.

.Clone()

Dgv de her kolonun .Tag propertisi varmı hatıriayamadım. Eger varsa sıra numaralarını .Tag propertisinde saklayarak dgv2 de ıslem yapabılırsın.

Bir formda 2 Adet datagridview oluşturdum birde buton ekledim datagridview1'deki sütunları sütun başlıklarından sürükleyip bırakarak yerlerini değiştiriyorum ardından butona basınca Datagridview1'deki sütunlar Datagridview2'ye klonlanıyor ama malesef görünen sıralamada değil access tablosundaki sütun sırasına göre yazdığım kodda sorun yoksa bu yöntemde işe yaramıyor

Kod:
Imports System.Data.OleDb
 
Public Class Form2
    Dim cn As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & Application.StartupPath & "\nisa4.mdb")
    Dim ds As New DataSet
    Dim sanalCTablo As DataView
 
    Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        cariyenile()
        Me.DataGridView1.DataSource = sanalCTablo
    End Sub
 
    Sub cariyenile()
        Dim adp As New OleDbDataAdapter
        Dim cmd As OleDbCommand
        If (cn.State = ConnectionState.Closed) Then cn.Open()
        ds.Clear()
        sanalCTablo = Nothing
        cmd = New OleDbCommand("Select * from cari", cn)
        adp.SelectCommand = cmd
        adp.Fill(ds, "cari")
        Dim Sütun1(0) As DataColumn
        Sütun1(0) = ds.Tables("cari").Columns("carino")
        ds.Tables("cari").PrimaryKey = Sütun1
        adp.Dispose()
        cmd.Dispose()
        cn.Close()
        sanalCTablo = ds.Tables("cari").DefaultView
        sanalCTablo.AllowNew = True
        sanalCTablo.AllowDelete = True
        sanalCTablo.AllowEdit = True
    End Sub
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        DataGridView2.Columns.Clear()
        For Each dgvCol As DataGridViewColumn In DataGridView1.Columns
            DataGridView2.Columns.Add(DirectCast(dgvCol.Clone(), DataGridViewColumn))
        Next
    End Sub
End Class
 

zıppırık

Asistan
Katılım
5 Temmuz 2011
Mesajlar
433
Reaksiyon puanı
1
Puanları
0
Dim cloneSet As DataSet = ds.Clone()

direk dataset i klonlayarak dener misin?

birde Tag propertisine bakabildin mi? Hala hatırlayamıyorum satırların Tag propertisi varmı diye. Sıra numaralarını burada tutabilirsin. Bu sayade aktarırken buradan okursun.

Onun dışında yardımcı olamayacağım galiba. :S
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Dim cloneSet As DataSet = ds.Clone()

direk dataset i klonlayarak dener misin?

birde Tag propertisine bakabildin mi? Hala hatırlayamıyorum satırların Tag propertisi varmı diye. Sıra numaralarını burada tutabilirsin. Bu sayade aktarırken buradan okursun.

Onun dışında yardımcı olamayacağım galiba. :S

Dataseti kolonlamak nasıl işe yarıyacak anlamadım bu bu yüzden kodu buna göre denemedim ne yapmak gerektiğini belirtirsen onuda denerim , bu arada satırların tag properties'i demişsin sanırım sütunlardan bahsediyorsun propertieslerde böyle birşey yok ama şöyle bir kod ( Dim deger As String = DataGridView1.Columns(0).Tag ) yazdığımda ise kabul ediyor demekki kodlarda var, diğer yandan bunun ne işe yarıycağını anlamış değilim zaten elde edemediğim Datagridview içindeki sütunların sıralaması Standart sırası zaten hiç değişmiyor ( DataGridView1.Columns(0).index ) Columns(AccessSütunSırası) herzaman sabit sen datagridviewde istediğin kadar sıralamayı değiştir kodlarda 0'ıncı sütun hep 0'dır 1'inci sütun hep 1'inci 2'inci sütun hep 2'ncidir bu hiç değişmiyen bir sabittir datagridview'de hangi sıralarda göründüğünün önemi yok
 

zıppırık

Asistan
Katılım
5 Temmuz 2011
Mesajlar
433
Reaksiyon puanı
1
Puanları
0
.Tag içerisine Object olan her nesneyi alır. Sıralamayı burada tutarak dw2 ye aktarılabilir diye düşünmüştüm.
Sıralamada Önceki sıralama ve sıra değiştirdikten sonraki sıralama karşılaştırılarak hangi verinin kaçıncı sırada olduğu hesaplanabilir. Bu sıralama Tag'a yazılarak yeni dw de burada yazdığımız sıralamaya göre konum belirtebiliriz.

Ayrıca ben satırlardaki sıra değişimi olarak anladım. Sütunlardan bahsediyor muşsunuz.
Neyse sadece mantık yürüterek bir şeyler üretmeye çalıştım. Olurda aklınıza belki farklı bir şey gelebilir. :)
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=20751]Vatansever[/MENTION]

Birisi şöyle yapmış. Mantıklı göründü:

Kod:
Private Sub SaveColumnOrder()

    Dim upperBound As Integer = Me.DataGridView1.ColumnCount - 1

    Dim columnIndexes(upperBound) As String

 

    For index As Integer = 0 To upperBound

        Dim column As DataGridViewColumn = Me.DataGridView1.Columns(index)

 

        columnIndexes(column.DisplayIndex) = index.ToString()

    Next

 

    My.Settings.GridColumnIndexes = New StringCollection

    My.Settings.GridColumnIndexes.AddRange(columnIndexes)

End Sub

 

Private Sub LoadColumnOrder()

    Dim columnIndexes As StringCollection = My.Settings.GridColumnIndexes

 

    For displayIndex As Integer = 0 To columnIndexes.Count - 1

        Dim index As Integer = CInt(columnIndexes(displayIndex))

 

        Me.DataGridView1.Columns(index).DisplayIndex = displayIndex

    Next

End Sub

Bağlantı:

http://www.vbforums.com/showthread.php?t=595341
 
Üst