PDA

View Full Version : Currency Manager



masoodp666
یک شنبه 19 خرداد 1387, 20:53 عصر
درود
آقا تا حالا کسی با Currency Manager کار کرده ؟ اگه کسی حرفه ای با اون کار کرده این سوال منو جواب بده. ممنون میشم.
من برای اضافه کردن رکورد جدید از متد AddNew این آبجکت Currency Manager استفاده میکنم. به طور طبیعی بعد از اجرای اون یه سطر به انتهای Grid اضافه میشه و تمام TextBox و ... که به Grid مربوطه Bind هستن خالی میشن و آماده ورود اطلاعات رکورد جدید میشن.

اما جدیدا نمیدونم چی شده که این روال بالا به صورت طبیعی اجرا نمیشه. یعنی رکورد اضافه میشه به Grid اما بقیه کارها انجام نمیشه و عملا نمیشه اطلاعات رکورد جدید رو اضافه کرد !

اگه استای در این زمینه راهنمایی کنه ممنون میشم.

Amateur_G
دوشنبه 20 خرداد 1387, 21:09 عصر
سلام.
لطفا كد بزار تا اگه شد ببينيم مشكل از كجاست.

Amateur_G
سه شنبه 21 خرداد 1387, 11:25 صبح
سلام.
لطفا كد رو بزار تا ببينيم مشكل از كجاست.

masoodp666
سه شنبه 21 خرداد 1387, 11:47 صبح
اين کد برنامه است همونه که بالا توضيح دادم:


Public Class Question
Dim CN As New SqlConnection("Data Source=.;Initial Catalog=Clinic;Integrated Security=True")
Dim SQLDA As New SqlDataAdapter
Dim DS As New DataSet

Private Sub Question_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim t2 As New DataTable("anstype")
DS.Tables.Add(t2)
Dim cmd2 As New SqlCommand
cmd2.Connection = CN
cmd2.CommandType = CommandType.Text
cmd2.CommandText = "select * from anstype"
SQLDA.SelectCommand = cmd2
SQLDA.Fill(DS.Tables("anstype"))

Dim t1 As New DataTable("question")
DS.Tables.Add(t1)
Dim cmd1 As New SqlCommand
cmd1.Connection = CN
cmd1.CommandType = CommandType.Text
cmd1.CommandText = "select qid,fid,question.anstypeid,question,qpriority,qvis ible,anstype from question inner join anstype on question.anstypeid=anstype.anstypeid"
SQLDA.SelectCommand = cmd1
SQLDA.Fill(DS.Tables("question"))

DataGridView1.DataSource = t1
DataGridView1.AllowUserToAddRows = False

DataGridView1.Columns("qpriority").HeaderText = "اولويت"
DataGridView1.Columns("qpriority").Width = 40
DataGridView1.Columns("qpriority").Resizable = DataGridViewTriState.False

DataGridView1.Columns("fid").HeaderText = "کد بخش"
DataGridView1.Columns("fid").Width = 52
DataGridView1.Columns("fid").Resizable = DataGridViewTriState.False

DataGridView1.Columns("qid").HeaderText = "کد سوال"
DataGridView1.Columns("qid").Width = 53
DataGridView1.Columns("qid").Resizable = DataGridViewTriState.False

DataGridView1.Columns("question").HeaderText = "شرح سوال"
DataGridView1.Columns("question").Width = 224
DataGridView1.Columns("question").Resizable = DataGridViewTriState.False

DataGridView1.Columns("anstype").HeaderText = "نوع جواب"
DataGridView1.Columns("anstype").Width = 70
DataGridView1.Columns("anstype").Resizable = DataGridViewTriState.False

DataGridView1.Columns("qvisible").HeaderText = "نمايش"
DataGridView1.Columns("qvisible").Width = 40
DataGridView1.Columns("qvisible").Resizable = DataGridViewTriState.False

DataGridView1.Columns("anstypeid").Visible = False

comboAnsType.DataSource = DS.Tables("anstype")

Dim CM AS CurrencyManager
CM = Me.BindingContext(DS.Tables("question"))

txtQID.DataBindings.Add("Text", DS.Tables("question"), "qid")
txtFID.DataBindings.Add("Text", DS.Tables("question"), "fid")
txtQuestion.DataBindings.Add("Text", DS.Tables("question"), "question")
txtQPriority.DataBindings.Add("Text", DS.Tables("question"), "qpriority")
comboAnsType.DataBindings.Add("Text", DS.Tables("question"), "anstype")
chkQVisible.DataBindings.Add("Checked", DS.Tables("question"), "qvisible")

butFSave.Enabled = False
End Sub

Private Sub butNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butNew.Click
CM.AddNew()
End Sub
اول یه combobox که پر میشه و بعد هم DataGridView

Amateur_G
چهارشنبه 22 خرداد 1387, 15:23 عصر
سلام.
من براي انجام اين كار ها از dataview استفاده مي كنم كه كد آن به صورت زيره:




Dim objDataAdapter As New OleDbDataAdapter
Dim objDataSet As New DataSet

Dim objDataView As DataView
Dim objCurrencyManager As CurrencyManager

objDataAdapter.SelectCommand = New OleDbCommand
objDataAdapter.SelectCommand.Connection = objconnection
objDataAdapter.SelectCommand.CommandText = "select * from TableName"

objDataAdapter.SelectCommand.CommandType = CommandType.Text
objDataSet = New DataSet
objDataAdapter.Fill(objDataSet, "TableName")
objDataView = New DataView(objDataSet.Tables("TableName"))
objCurrencyManager = CType(Me.BindingContext(objDataView), CurrencyManager)



بعد اطلاعات رو به صورت زير به كنترل ها bind ميكنم:




TextBox.DataBindings.Clear()
TextBox.DataBindings.Add("text", objDataView, "Field")




اميدوارم اين كد بتونه كمكتون كنه.
بازم اگه سوالي بود درخدمتيم.:تشویق:

Amateur_G
چهارشنبه 22 خرداد 1387, 15:33 عصر
راستي اگه CurrencyManager رو بخواي براي DataTable استفاده كني از متد NewRow استفاده كن. اميدوارم جواب بده.:تشویق:



Dim instance As DataTable (http://barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/T_System_Data_DataTable.htm)Dim returnValue As DataRow (http://barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/T_System_Data_DataRow.htm)returnValue = instance.NewRow


اين كد تو MSDN پيدا كردم. :لبخندساده:

masoodp666
جمعه 24 خرداد 1387, 15:13 عصر
ممنون از وقتی که گذاشتی.

من مشکلم در نوشتن کد currency manager نیست. مشکل فقط در متد AddNew اونه.
تا حالا بارها و بارها من از این متد استفاده کردم و هیچ مشکلی هم نداشته و خیلی هم سریعتر از روشهای دیگه جواب منو داده و خیلی هم راحته.

ولی نمیدونم چیکار کردم که این مشکل پیش اومده.

سوال من در واقع اینه که چه اتفاقی اگه بیفته این متد اجرا نمیشه ؟

masoodp666
دوشنبه 27 خرداد 1387, 12:21 عصر
منتظر کمک اساتید هستم.

masoodp666
سه شنبه 28 خرداد 1387, 09:23 صبح
یعنی تا حالا کسی به این مشکل بر نخورده. من اولین هستم.....
از اساتید حرفه ای در این زمینه خواهش دارم جواب منو بدن. ممنون میشم.