PDA

View Full Version : مقدار دهی نشدن دیتاگرید در ماژول



hosein320
دوشنبه 26 فروردین 1392, 02:14 صبح
سلام
من یه ماژول نوشتم که به بانک وصل میشه(با دیتاگرید) و باید مقدار های بدست اومده رو تو یه رشته بریزه
کدم رو تو فرم تست کردم و جواب میده
ولی تو ماژول اصلا دیتاگرید مقداردهی نمیشه
میخواستم دلیلشو بدونم:متفکر::متفکر:

zahedi121
دوشنبه 26 فروردین 1392, 07:43 صبح
سلام
کدتون را بگذارید تا بهتر بتونیم راهنمایی کنیم . شاید فرمها را در ماژول تعریف نکردید ، متغیراتون چیه ؟ و ...
در کل مطمئنا کدی که در فرم میگذارید اگر مستقیم کپی کنید در یک ماژول کار نمی کنه.

در مورد ویرایش عنوان هم اگر پست اول را ویرایش پیشرفته کنید ، به عنوان دسترسی دارید.
موفق باشید

davood-ahmadi
دوشنبه 26 فروردین 1392, 07:58 صبح
سلام
توی دستورت یک فاکنشن درست کن و خروجیش از نوع دیتاگرید و بعد داخل فرم اون ماژول رو صدا کن
ماژول :


Public Function FillGridView() As DataGridView
Dim cnn As New SqlClient.SqlConnection("Type Connection String")
Dim da As New SqlClient.SqlDataAdapter("Select * from Person", cnn)
Dim dt As New DataTable("Person")
da.Fill(dt)
Dim dgv As New DataGridView
dgv.DataSource = dt
dgv.Columns(0).Visible = False
Return dgv
End Function

فرم :

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
' Load1()
Me.DataGridView1 = FillGridView()
End Sub
اگر جواب نداد احتمالا دستوراتت یک ایرادی داره.

hosein320
دوشنبه 26 فروردین 1392, 10:09 صبح
این کد ماژوله

Imports System.Data.SqlClient
Public Class Bind
Public Property ERR As Boolean = False
Public Property Text As String
Dim d1, d2, ti As String
Dim DG As New DataGridView

Friend Sub Bind(ByVal CmdText As String)
Try
Dim Sqlcon As New SqlConnection
Dim SqlCmd As New SqlCommand
Dim Sqlda As New SqlDataAdapter
Dim Sqldt As New DataTable
'تعريف کانکشن استرينگ
Sqlcon.ConnectionString = "Data Source=.;Initial Catalog=chat;Integrated Security=True"

SqlCmd.Connection = Sqlcon
SqlCmd.CommandText = CmdText 'دستور اس کي ال
Sqlda.SelectCommand = SqlCmd
Sqlcon.Open() 'باز کردن بانک
Sqlda.Fill(Sqldt)
DG.DataSource = Sqldt 'پر کردن ديتاگريد
Sqlcon.Close() 'بستن بانک
Catch ex As Exception
MsgBox("Error : " & ex.Message, MsgBoxStyle.Exclamation)
ERR = True
End Try

End Sub

hosein320
دوشنبه 26 فروردین 1392, 12:22 عصر
:ناراحت: دوستان کمک کنن

hosein320
دوشنبه 26 فروردین 1392, 14:19 عصر
نمیشه گرید ویو رو تو ماژول مقداردهی کرد:متفکر:

hosein320
دوشنبه 26 فروردین 1392, 19:33 عصر
دوستان یکی کمک کنه:گریه:

hosein320
دوشنبه 26 فروردین 1392, 21:06 عصر
سوالم اینقدر سخته یعنی :|

hosein320
دوشنبه 26 فروردین 1392, 22:29 عصر
حداقل یکی بیاد بگه نمیشه:عصبانی::عصبانی++:

Ishtar_4552
دوشنبه 26 فروردین 1392, 22:40 عصر
خروجی تابع بایند رو از نوع DataTable در نظر بگیرید و بعد اون رو بایند کنید در دیتاگرید.. شاید دلیلش بایند کردن مقدار به دیتا گرید داخل متد هست.. خارج از متد، اطلاعات رو بایند کنید..

hosein320
دوشنبه 26 فروردین 1392, 22:50 عصر
میخوام تو ماژول اطلاعات رو از دیتاگرید بگیرم و بریزم تو یه رشته:گریه:

hosein320
دوشنبه 26 فروردین 1392, 22:56 عصر
میخوام اطلاعات در ماژول به یک رشته تبدیل بشن
و رشته ارسال شود
نمیخوام دیتاگرید تو فرمم رو مقدار بدم

cherchil_hra
سه شنبه 27 فروردین 1392, 11:42 صبح
به این علت هست که تا DataGridView شما به فرم اضافه نشه مقدار دهی سطر و ستون انجام نمیشه، بنابراین مقدار صفر می گیری

در ضمن برای اتصال فیلدها به هم چرا از خود dataTable استفاده نمی کنی؟

...
Row = Sqldt.Rows.Count - 1
cells = Sqldt.Columns.Count - 1
...

For J = 0 To cells
Str += Sqldt.Rows(I)(J).ToString
If J <> cells Then Str += ","
Next
...


حالا به فرض هم بخوای فیلدها رو بهم متصل کنی؛ چرا داخل دستور select اینکار رو انجام نمی دی؟
علت اینکه داخل کلاس bind مقادیر فیلدها رو بهم متصل می کنی و سمت برنامه جدا می کنی و داخل آرایه می ریزی چیه؟ این کار رو سمت کلاس bind انجام بده و در خروجی تابع، آرایه بفرست یا از خود dataTable استفاده کن.

زمانی هم که از SqlDataAdapter استفاده می کنی نیازی به Open کردن connection نیست، خودش انجام میده.

hosein320
سه شنبه 27 فروردین 1392, 18:32 عصر
در ضمن برای اتصال فیلدها به هم چرا از خود dataTable استفاده نمی کنی؟

حالا به فرض هم بخوای فیلدها رو بهم متصل کنی؛ چرا داخل دستور select اینکار رو انجام نمی دی؟


منظورتون رو متوجه نشدم

:متفکر::متفکر::متفکر:

hosein320
سه شنبه 27 فروردین 1392, 22:52 عصر
من چجوری میتونم این کار رو انجام بدم:متفکر:
میخوام یه دستور بفرستم به ماژول
بعد نتیجه اونجا گرفته شه و ریخته بشه تو یه رشته
نمیشه یعنی؟

davood-ahmadi
چهارشنبه 28 فروردین 1392, 07:29 صبح
کد توی ماژول :
Friend Function Bind(ByVal CmdText As String) As DataTable
Dim Sqlcon As New SqlConnection
Dim SqlCmd As New SqlCommand
Dim Sqlda As New SqlDataAdapter
Dim Sqldt As New DataTable
Try

'تعريف کانکشن استرينگ
Sqlcon.ConnectionString = "Data Source= ServerName ;DataBase=Database Name;User ID= ; password= "

SqlCmd.Connection = Sqlcon
SqlCmd.CommandText = CmdText 'دستور اس کي ال
Sqlda.SelectCommand = SqlCmd
Sqlcon.Open() 'باز کردن بانک
Sqlda.Fill(Sqldt)
Sqlcon.Close() 'بستن بانک
Catch ex As Exception
MsgBox("Error : " & ex.Message, MsgBoxStyle.Exclamation)
ERR = True
End Try

Dim iRow As Integer
Dim icells As Integer
iRow = Sqldt.Rows.Count - 1
icells = Sqldt.Columns.Count - 1
Dim Str, S1, s2 As String

Dim dRow As DataRow
Try
For I As Integer = 0 To iRow
dRow = Sqldt.Rows(I)

'If Str<>"" then Str+="!"
For J As Integer = 0 To icells
Str = Str & dRow(J).Value
If J <> icells Then Str += ","
Next
If I <> iRow - 1 Then Str += "!"
Next

Str = Str.Replace(",,,", "")
Str = Str.Replace(",,", "")
Catch ex As Exception

End Try
Text = Str
Return Sqldt
End Function

کد توی لود فرم :
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim dt As DataTable = Bind("select * from personel")
Me.DataGridView1.DataSource = dt
End Sub

hosein320
چهارشنبه 28 فروردین 1392, 20:42 عصر
دوست عزیز میخوام تو ماژول تبدیل بشه به یک رشته
و تو فرمم رشته رو دریافت کنم

davood-ahmadi
پنج شنبه 29 فروردین 1392, 08:13 صبح
سلام آدم قیافه و هیکل رو که میبینه میترسه که جواب نده :قهقهه:

Friend Function Bind(ByVal CmdText As String) As String
Dim Text As String = ""
Dim Sqlcon As New SqlConnection
Dim SqlCmd As New SqlCommand
Dim Sqlda As New SqlDataAdapter
Dim Sqldt As New DataTable
Try

'تعريف کانکشن استرينگ
Sqlcon.ConnectionString = "Data Source= ;DataBase= ;User ID= ; password= "

SqlCmd.Connection = Sqlcon
SqlCmd.CommandText = CmdText 'دستور اس کي ال
Sqlda.SelectCommand = SqlCmd
Sqlcon.Open() 'باز کردن بانک
Sqlda.Fill(Sqldt)
Sqlcon.Close() 'بستن بانک
Catch ex As Exception
MsgBox("Error : " & ex.Message, MsgBoxStyle.Exclamation)
ERR = True
End Try

Dim iRow As Integer
Dim icells As Integer
iRow = Sqldt.Rows.Count - 1
icells = Sqldt.Columns.Count - 1
Dim Str, S1, s2 As String

Dim dRow As DataRow
Try
For I As Integer = 0 To iRow
dRow = Sqldt.Rows(I)

'If Str<>"" then Str+="!"
For J As Integer = 0 To icells
Str = Str & dRow(J).Value
If J <> icells Then Str += ","
Next
If I <> iRow - 1 Then Str += "!"
Next

Str = Str.Replace(",,,", "")
Str = Str.Replace(",,", "")
Catch ex As Exception

End Try
Text = Str
Return Text
End Function

hosein320
پنج شنبه 29 فروردین 1392, 08:48 صبح
برا همینم گذاشتمش دیگه:قهقهه:
میشه بگین چکارش کردین:متفکر:
متوجه نمیشم:متعجب:

davood-ahmadi
پنج شنبه 29 فروردین 1392, 08:57 صبح
توی ماژول شما یک فانکشن می نویسی که خروجیش String باشه.
و بعد ارتباط می زنی و اطلاعات رو از بانک می خونی و توی یک Datatable میرزیش . و بعد توی یک حلقه هر ردیف جدول رو می خونی و می ریزی توی یک DataRow و در نهایت کارت رو خروجی می کنی.
بعد توی فرم یک متغیر از نوع String می نویسی که خروجی فانکشن رو بهش می دی.
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim str As String = Bind("select * from personel")
MsgBox(str)
End Sub

hosein320
پنج شنبه 29 فروردین 1392, 09:18 صبح
خب مشکل هم همینه دوست عزیز
دیتاگرید مقداردهی نمیشه:ناراحت:
شما تست کردین خودتون:متفکر:

pooya1072
پنج شنبه 29 فروردین 1392, 12:27 عصر
سلام پهلوون ....
منم همینطور داشتم تاپیک ها رو چک می کردم رسیدم به تاپیک شما ترسیدم جواب ندم .....
متغیر sqldt رو به صورت پابلیک تعریف کن . شاید مشکلت حل بشه .اگه نشد توروخدا ببخشید . بزار پای بچگیم :لبخند:

hosein320
پنج شنبه 29 فروردین 1392, 12:40 عصر
نمیشه دوستان
:افسرده:

davood-ahmadi
شنبه 31 فروردین 1392, 12:49 عصر
سلام.
چرا دیتاگرید ؟
دیتاگرید توی کار شما نقشی نداره که
شما فرمودیدکه می خوام یک متن برگرده توی فرم. خوب منم گذاشتم
البته توی پست قبل از این هم روی دیتاگرید گذاشتم. نمودنم دیگه کجاش مشکل داره.
من فکر کردم که حل شده.
اگر خواستید به ایمیلم و یا در همین جا یک نمونه بگذارید.

hosein320
شنبه 31 فروردین 1392, 19:56 عصر
دوست من
اطلاعات باید از بانک خونده بشن و با یه فرمت ریخته شن داخل یک رشته
قسمت دومش که مشکلی ندارم:لبخند:
نمیدونم چرا دیتاگرید مقدار دهی نمیشه:ناراحت:

davood-ahmadi
یک شنبه 01 اردیبهشت 1392, 07:01 صبح
اگر طبق تایپیک پاسخ شماره 16 عمل کنی درست میشه.
حتما نیاز نیست که توی ماژول از دیتاگرید استفاده کنی.
قبلا طبق روش شما استفاده کرده بودم، ولی نمونه اش رو پیدا نکردم و یادم نمی یاد توی کدوم پروژه استفاده کردم.

hosein320
یک شنبه 01 اردیبهشت 1392, 13:02 عصر
دقیقا نیازه که داخل ماژول مقداردهی شه!