View Full Version : سوال: اضافه کردن در datagiridview بصورت سطر به سطر و ستون به ستون از فایل متنی
Rain_Saeid
چهارشنبه 30 تیر 1395, 11:31 صبح
سلام
دوستان عزیز ی فایل متنی دارم که حدود 5 تا ستون و 20 خط هست
مانند نوشته زیر:
xxx1 0600000 0000000000 2 g:\skhd
ccc2 000080000 000000 2 d:\skldhf
vvv2 000080000 000080000 2 c:\hksajshj
fff3 000300000 0000100000 2 c:\dkjf
میخوام با دستور این هارو تو سطر و ستون گزینه datagiridview بزارم
ممنون میشم راهنمایی بفرمایید
gilsoft
چهارشنبه 30 تیر 1395, 13:32 عصر
سلام
دوستان عزیز ی فایل متنی دارم که حدود 5 تا ستون و 20 خط هست
مانند نوشته زیر:
xxx1 0600000 0000000000 2 g:\skhd
ccc2 000080000 000000 2 d:\skldhf
vvv2 000080000 000080000 2 c:\hksajshj
fff3 000300000 0000100000 2 c:\dkjf
میخوام با دستور این هارو تو سطر و ستون گزینه datagiridview بزارم
ممنون میشم راهنمایی بفرمایید
سلام دوست عزیز
اینم کد مربوطه:
Dim TextLine As String = ""
Dim SplitLine() As String
Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txtFile.txt")
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SplitLine = Split(TextLine, " ")
DataGridView1.Rows.Add(SplitLine)
Loop
روش دوم:
Dim TextLine As String = ""
Dim SplitLine() As String
Dim FirstLoop As Boolean = True
Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txtFile.txt")
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SplitLine = Split(TextLine, " ")
If FirstLoop = True Then
Dim NC As Integer = SplitLine.GetUpperBound(0)
Dim cl As DataGridViewTextBoxColumn
For i As Integer = 0 To NC
cl = New DataGridViewTextBoxColumn
With cl
.HeaderText = "Column" & CStr(i + 1)
Name = "Column" & CStr(i + 1)
.Width = 90
.ReadOnly = True
End With
DataGridView1.Columns.Add(cl)
Next
FirstLoop = False
End If
DataGridView1.Rows.Add(SplitLine)
Loop
objReader.Close() : objReader.Dispose()
موفق باشید .....
Rain_Saeid
چهارشنبه 30 تیر 1395, 17:54 عصر
تشکر از شما استاد گرامی
روی چند سطر جواب داد
ولی روی همش جواب نداد
منظور اینکه ستون اول از متن ، بعضی از کلمه ها سه حرفی یا 4 حرفی یا .. هستن و با ستون جلویی فاصله شون متفاوت هست
gilsoft
چهارشنبه 30 تیر 1395, 19:53 عصر
تشکر از شما استاد گرامی
روی چند سطر جواب داد
ولی روی همش جواب نداد
منظور اینکه ستون اول از متن ، بعضی از کلمه ها سه حرفی یا 4 حرفی یا .. هستن و با ستون جلویی فاصله شون متفاوت هست
سلام مجدد
TextLine = objReader.ReadLine()
کد فوق وظیفهاش خواندن یک سطر از فایل متنی ( Text File ) هست .. منظور از یک سطر اینه که: انتهای آن با Cr/Lf (یعنی Chr(10) + Chr(13)) یا همون VbCrLf تموم شده باشه
بنابراین اون سطرهایی که مشکل دارند رو باید چک کنی
و اما کذ زیر
SplitLine = Split(TextLine, " ")
کاراکتر فاصله ( یعتی Chr(32) ) رو به عنوان جداکنندهی ستونها تعریف میکنه .. که اونم باید در فایل متنی ( Text File ) چک کنی و ببینی آیا مابین رشتهها فاصله وجود داره .. یا از کاراکتر دیگهای به عنوان جداکننده استفاده شده ( مثلا کاراکتر TAB یعنی Chr(9) ) یا همون vbTab
بازم اگه مشکلی بود .. من در خدمتم .....
موفق باشید .....
Rain_Saeid
چهارشنبه 30 تیر 1395, 20:22 عصر
بازهم تشکر
فقط مشکل اینجاس که مثلا :
ali 25 2225 2 c:\jksj
esmaeel 22 2222 2 c:\sss
منظور اینجاست که فاصله ای که بین ali تا 25 هست، 5 تا space هست
فاصله ای که بین esmaeel تا 22 هست، 1 عدد space هست
خوبی این مسئله اینجاست که فایل متنی بنده برای ستون اول 13 کاراکتر جا گذاشته ، و بعد از 13 همین کاراکتر ستون بعدی شروع میشه (string)
ستون دوم 18 کاراکتر هست و بعد از اون 3 تا space داره (string)
ستون سوم هم 18 کاراکتر هست و بعد از اون 3 تا space داره (string)
ستون چهارم فقط یک رقم عدد هست و بعدش 3 تا space
ستون پنجم آدرس هست که معلوم نیست چند تا string باشه که میره تا انتهای خط
فایل متنی رو به ضمیمه پیوست کردم، شکلی کلی اون هست
خط اولم که نیاز نیست
5 خط آخر هم نیاز نیست
با تشکر
Rain_Saeid
چهارشنبه 30 تیر 1395, 20:36 عصر
سلام مجدد
جداکنندهی ستونها تعریف میکنه .. که اونم باید در فایل متنی ( Text File ) چک کنی و ببینی آیا مابین رشتهها فاصله وجود داره .. یا از کاراکتر دیگهای به عنوان جداکننده استفاده شده ( مثلا کاراکتر TAB یعنی Chr(9) ) یا همون vbTab
جدا کننده تو این فایل space هست، ولی چون بین ستون اول و ستون دوم space ها معلوم نیست چندتا هستن، دقیقا نتونستم کدش رو دربیارم
gilsoft
چهارشنبه 30 تیر 1395, 21:24 عصر
این روش اول:
Private Sub btnRead_Click(sender As System.Object, e As System.EventArgs) Handles btnRead.Click
Dim TextLine As String = ""
Dim SplitLine() As String
Dim FirstLoop As Boolean = True
Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txt.txt")
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
If FirstLoop = True Then
SplitLine = Split(TextLine, vbTab)
Dim NC As Integer = SplitLine.GetUpperBound(0)
Dim cl As DataGridViewTextBoxColumn
For i As Integer = 0 To NC
cl = New DataGridViewTextBoxColumn
With cl
.HeaderText = SplitLine(i)
Name = "Col" & SplitLine(i)
.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.ReadOnly = True
End With
DataGridView1.Columns.Add(cl)
Next
FirstLoop = False
Else
TextLine = DeleteSpaces(TextLine)
SplitLine = Split(TextLine, " ")
If SplitLine(0).IndexOf(":") <= 0 And SplitLine.Length > 1 Then
DataGridView1.Rows.Add(SplitLine)
End If
End If
Loop
objReader.Close() : objReader.Dispose()
End Sub
Public Function DeleteSpaces(ByVal str As String) As String
Dim i, len As Integer
len = VB.Len(str)
Dim spc As String
For i = len To 1 Step -1
spc = Space(i)
If InStr(str, spc) > 1 Then str = Replace(str, spc, " ")
Next
Return str
End Function
روش دوم:
Private Sub btnRead_Click(sender As System.Object, e As System.EventArgs) Handles btnRead.Click
Dim TextLine As String = ""
Dim SplitLine() As String
Dim FirstLoop As Boolean = True
Dim NC As Integer
Dim arLine(4) As String
Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txt.txt")
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
If FirstLoop = True Then
SplitLine = Split(TextLine, vbTab)
NC = SplitLine.GetUpperBound(0)
Dim cl As DataGridViewTextBoxColumn
For i As Integer = 0 To NC
cl = New DataGridViewTextBoxColumn
With cl
.HeaderText = SplitLine(i)
Name = "Col" & SplitLine(i)
.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.ReadOnly = True
End With
DataGridView1.Columns.Add(cl)
Next
FirstLoop = False
Else
If TextLine.Trim.Length > 0 Then
arLine(0) = TextLine.Substring(0, 13).Trim
If arLine(0).IndexOf(":") <= 0 And arLine.Length > 1 Then
arLine(1) = TextLine.Substring(13, 18).Trim
arLine(2) = TextLine.Substring(34, 18).Trim
arLine(3) = TextLine.Substring(55, 1).Trim
arLine(4) = TextLine.Substring(59).Trim
DataGridView1.Rows.Add(arLine)
End If
End If
End If
Loop
objReader.Close() : objReader.Dispose()
End Sub
که من تصور میکنم روش دوم مد نظر شماست
موفق باشید .....
Rain_Saeid
پنج شنبه 31 تیر 1395, 10:24 صبح
ممنون استاد
عالی بود.. روش دوم بدرستی جواب داد
البته روش اول هم شاید جواب بده، ولی چون نتونستم اجراش کنم، جواب نگرفتم
خط دوم function قسمت len = VB.Len(str) کلمه vb اینجا متوجه نشدم چیه
در هرصورت تشکر، خیلی عالی بود
gilsoft
پنج شنبه 31 تیر 1395, 11:43 صبح
خط دوم function قسمت len = VB.Len(str) کلمه vb اینجا متوجه نشدم چیه
این خط رو به اول فایل اضافه کن
Imports VB = Microsoft.VisualBasic
و یا بجای len = VB.Len(str) از کد زیر استفاده کن
Len = str.Length
در واقع روش اول با استفاده از تابع DeleteSpaces میاد فاصلهها رو حذف میکنه
موفق باشید .....
Rain_Saeid
پنج شنبه 31 تیر 1395, 18:06 عصر
این خط رو به اول فایل اضافه کن
Imports VB = Microsoft.VisualBasic
و یا بجای len = VB.Len(str) از کد زیر استفاده کن
Len = str.Length
در واقع روش اول با استفاده از تابع DeleteSpaces میاد فاصلهها رو حذف میکنه
موفق باشید .....
اولی هم جواب داد، باز هم تشکر
Rain_Saeid
شنبه 02 مرداد 1395, 17:58 عصر
سلام مجدد
استاد ی سوال
بخوام آدرس مثلا ستون دوم و سطر دوم ، یا سطر سوم یا حالا هرستون یا سطری رو تو A ذخیره کنم، نحوه دستورش چطوریه
Dim A as string
با تشکر
gilsoft
یک شنبه 03 مرداد 1395, 07:56 صبح
بخوام آدرس مثلا ستون دوم و سطر دوم ، یا سطر سوم یا حالا هرستون یا سطری رو تو A ذخیره کنم، نحوه دستورش چطوریه
Dim A as string
سلام
شما اول بفرما آدرس توی دیتاگرید رو میخوای ذخیره کنی یا آدرس توی فایل رو ؟ :متفکر:
متغیر A حتما باید از نوع رشتهای باشه یا ؟ ( مثلا متغیرهای نوعدار « منظور Structure » یا آرایه )
منتظرم .....
Rain_Saeid
یک شنبه 03 مرداد 1395, 18:08 عصر
سلام
شما اول بفرما آدرس توی دیتاگرید رو میخوای ذخیره کنی یا آدرس توی فایل رو ؟ :متفکر:
متغیر A حتما باید از نوع رشتهای باشه یا ؟ ( مثلا متغیرهای نوعدار « منظور Structure » یا آرایه )
منتظرم .....
متغیر رشته ای میخوام
که هرموقع خواستم ، تو تکس باکس یا داخل متغیر ذخیره کنم
Rain_Saeid
سه شنبه 05 مرداد 1395, 16:23 عصر
مثلا سطر دوم از ستون چهارم رو برای بنده بریزه داخل متغیر رشته ای از String
و همنیطور سطر آخر رو داخل کمبوباکس بچینه..
ممنون میشم راهنمایی بفرمایید
gilsoft
چهارشنبه 06 مرداد 1395, 09:53 صبح
مثلا سطر دوم از ستون چهارم رو برای بنده بریزه داخل متغیر رشته ای از String
سلام دوست عزیز
اینم کد مربوطه:
Dim data As String
data = DataGridView1.Item(3, 1).Value
TextBox1.Text = data
همنیطور سطر آخر رو داخل کمبوباکس بچینه..
Dim LastRow As Integer = IIf(DataGridView1.AllowUserToAddRows, DataGridView1.RowCount - 2, DataGridView1.RowCount - 1)
For c As Integer = 0 To DataGridView1.ColumnCount - 1
ComboBox1.Items.Add(DataGridView1.Item(c, LastRow).Value)
Next
موفق باشید .....
Rain_Saeid
پنج شنبه 07 مرداد 1395, 14:12 عصر
سلام دوست عزیز
اینم کد مربوطه:
Dim data As String
data = DataGridView1.Item(3, 1).Value
TextBox1.Text = data
Dim LastRow As Integer = IIf(DataGridView1.AllowUserToAddRows, DataGridView1.RowCount - 2, DataGridView1.RowCount - 1)
For c As Integer = 0 To DataGridView1.ColumnCount - 1
ComboBox1.Items.Add(DataGridView1.Item(c, LastRow).Value)
Next
موفق باشید .....
با تشکرولی کد اول جواب نداد
کد دوم هم آخرین خط رو انداخت داخل کمبوباکس
میخواستم آخرین ستون یا مثلا ستون دوم بره تو کمبوباکس
gilsoft
پنج شنبه 07 مرداد 1395, 14:43 عصر
کد اول جواب نداد
DataGridView1.Item(3, 1).Value
کد فوق دقیقا ستون چهارم از سطر دوم رو میخونه ( شماره سطر و ستون از 0 شروع میشه ) که مقدارش 2 هست.
کد دوم هم آخرین خط رو انداخت داخل کمبوباکس
میخواستم آخرین ستون یا مثلا ستون دوم بره تو کمبوباکس
شما در پست قبلی فرمودید آخرین سطر !
اینم کد مربوط به آخرین ستون:
Dim LastRow As Integer = IIf(DataGridView1.AllowUserToAddRows, DataGridView1.RowCount - 2, DataGridView1.RowCount - 1)
Dim LastCol As Integer = DataGridView1.ColumnCount - 1
For r As Integer = 0 To LastRow
ComboBox1.Items.Add(DataGridView1.Item(LastCol, r).Value)
Next
موفق باشید .....
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.