PDA

View Full Version : سوال: سلام مشکل در کار با دیتاست و دیتاتیبل بعد از اولین استفاده درخروجی اکسل(خالی نشدن دیتاست ودیتاتیبل)



amirm2012
یک شنبه 08 مرداد 1396, 12:12 عصر
سلام من از کد زیر برای خروجی فایل اکسل استفاده می کنم و همه چیز درسته فقط مشکل اینجاست که وقتی یه رکورد جدید ثبت می کنم یا ویرایش می کنم و مجددا فایل اکسل می گیریم هموم اطلاعات قلبی رو بهم نشون میده. کمک کنید دیگه خسته شدم هر چی گشتم به نتیجه نمی رسم.:گریه::گریه::عصبانی++::عصب انی++:
کد خروجی فایل اکسل


Dim exeleapp As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application()
Dim exelbook As Microsoft.Office.Interop.Excel.Workbook = exeleapp.Workbooks.Add(XlSheetType.xlWorksheet)
Dim exelworksheet As Microsoft.Office.Interop.Excel.Worksheet = CType((exelbook.Worksheets(1)), Worksheet)
exelworksheet.DisplayRightToLeft = True




Dim clmncnt As Integer = My.Forms.Form_listsarb.DataGridkhedmat.Columns.Cou nt
Dim rng() As Range = New Range(clmncnt) {}


Dim x As Integer
For x = 0 To clmncnt - 1 Step x + 1
Dim celladress As String = Convert.ToString(Convert.ToChar(Convert.ToByte(x + 65))) + "1"


rng(x) = exelworksheet.Range(celladress, celladress)
rng(x).Value2 = My.Forms.Form_listsarb.DataGridkhedmat.Columns(x). HeaderText


exelworksheet.UsedRange.Font.Name = "b titr"
exelworksheet.UsedRange.ColumnWidth = 20
Next


Dim j As Integer = 2


For Each r As DataRow In DataSet1.Tables(0).Rows
Dim k As Integer
For k = 0 To clmncnt - 1 'Step k + 1
Dim celladress As String = Convert.ToString(Convert.ToChar(Convert.ToByte(k + 65))) + j.ToString()
rng(k) = exelworksheet.Range(celladress, celladress)
rng(k).Value2 = r(k).ToString()
exelworksheet.UsedRange.Font.Name = "b mitra"
Next
j = j + 1


Next
exeleapp.Visible = True


این کد رو هم گذاشتم روی یه رادیوچک که باید انتخاب بشه بعد رو دکمه ای که کد های بالا رو نوشتم کلیلک کنه

Me.sarbTableAdapter.FillBy(Me.sarbDataSet1.sarb)

hamidrezax1
دوشنبه 09 مرداد 1396, 18:51 عصر
دوست عزیز شما نحوه ذخیره اطلاعات در دیتابیستون رو اینجا قرار ؟؟؟؟
بنظر من 2 حالت امکان داره اول اینکه برنامه رو دارین از خود ویژوال ران میکنید که در این صورت با هر بار استارت برنامه اطلاعات دیتابیس اولیه ران میشه
دوم اینکه شما توی نوشتن کد های ذخیره اطلاعاتتون جایی رو دارین اشتباه میرین و دیتاست دیتاهای قبلی رو مجدد میخونه

A_1397
سه شنبه 10 مرداد 1396, 12:43 عصر
برای خروجی گرید به اکسل ازین کدها استفاده کن ببین حل میشه
SaveFileDialog1.Filter = "*.xls|*.xls"
SaveFileDialog1.ShowDialog()
If SaveFileDialog1.FileName <> "" Then
Dim oExcel As Object
Dim oWorkBook As Object
Dim oSheet As Object
oExcel = CreateObject("Excel.Application")
oWorkBook = oExcel.Workbooks.Add
oExcel.visible = True
Dim c, r As Integer
Dim ColNum As Integer = Grid.ColumnCount
Dim RowNum As Integer = Grid.RowCount
Dim col As Integer = 65
oSheet = oWorkBook.worksheets(1)
For c = 1 To ColNum
oSheet.Range(CStr(Chr(col) & 1)).Value = Grid.Columns(c - 1).HeaderText
col += 1
Next
For r = 1 To RowNum
For c = 1 To ColNum
oSheet.Cells(r + 1, c) = Grid.Rows(r - 1).Cells(c - 1).Value
Next
Next
oWorkBook.SaveAs(SaveFileDialog1.FileName, True)
oSheet = Nothing
oWorkBook = Nothing
oExcel = Nothing
End If
شما گرید رو آپدیت کنید توی دیتابیس ذخیره کنید و بعد از گرید خروجی اکسل بگیرید

amirm2012
شنبه 14 مرداد 1396, 17:19 عصر
برای خروجی گرید به اکسل ازین کدها استفاده کن ببین حل میشه
SaveFileDialog1.Filter = "*.xls|*.xls"
SaveFileDialog1.ShowDialog()
If SaveFileDialog1.FileName <> "" Then
Dim oExcel As Object
Dim oWorkBook As Object
Dim oSheet As Object
oExcel = CreateObject("Excel.Application")
oWorkBook = oExcel.Workbooks.Add
oExcel.visible = True
Dim c, r As Integer
Dim ColNum As Integer = Grid.ColumnCount
Dim RowNum As Integer = Grid.RowCount
Dim col As Integer = 65
oSheet = oWorkBook.worksheets(1)
For c = 1 To ColNum
oSheet.Range(CStr(Chr(col) & 1)).Value = Grid.Columns(c - 1).HeaderText
col += 1
Next
For r = 1 To RowNum
For c = 1 To ColNum
oSheet.Cells(r + 1, c) = Grid.Rows(r - 1).Cells(c - 1).Value
Next
Next
oWorkBook.SaveAs(SaveFileDialog1.FileName, True)
oSheet = Nothing
oWorkBook = Nothing
oExcel = Nothing
End If
شما گرید رو آپدیت کنید توی دیتابیس ذخیره کنید و بعد از گرید خروجی اکسل بگیرید

تشکر درسته. فقط اگه خواسته باشم شرط بزارم باید چیکار کنم مثلا بین دو تاریخ خواستم خروجی بگیریم.

amirm2012
شنبه 14 مرداد 1396, 17:57 عصر
دوست عزیز شما نحوه ذخیره اطلاعات در دیتابیستون رو اینجا قرار ؟؟؟؟
بنظر من 2 حالت امکان داره اول اینکه برنامه رو دارین از خود ویژوال ران میکنید که در این صورت با هر بار استارت برنامه اطلاعات دیتابیس اولیه ران میشه
دوم اینکه شما توی نوشتن کد های ذخیره اطلاعاتتون جایی رو دارین اشتباه میرین و دیتاست دیتاهای قبلی رو مجدد میخونه

از دستورات اس کیو ال استفاده می کنم

حذف
Dim Rnew As New SqlCommand
Dim StrDb As String
connect.Open()
StrDb = "delete from hamkar where id=" & lblid.Text & " "
Rnew = New SqlCommand(StrDb, connect)
Rnew.ExecuteNonQuery()
connect.Close()
GridViewhamkar

ثبت
Dim Rnew As New sqlCommand
Dim StrDb As String
connect.Open()
StrDb = "insert into hamkar (name,famil) values"
StrDb &= "(N'" & textname.Text & "' , N'" & Textfamil.Text & "')"
Rnew = New sqlCommand(StrDb, connect)
Rnew.ExecuteNonQuery()
connect.Close()
GridViewhamkar

ویرایش
Dim Rnew1 As New sqlCommand
Dim StrDb1 As String
connect.Open()
StrDb1 = "update hamkar set name=N'" & textname.Text & "' where id like '" & lblid.Text & "' "
Rnew1 = New sqlCommand(StrDb1, connect)
Rnew1.ExecuteNonQuery()
connect.Close()
GridViewhamkar

hamidrezax1
شنبه 14 مرداد 1396, 17:57 عصر
سلام دوست عزیز شما شرط رو با دیتابیستون اجرا کنید و از خروجی اون که درون گرید هست با کد دوستمون خروجی نهیه کنید

amirm2012
شنبه 14 مرداد 1396, 18:09 عصر
سلام دوست عزیز شما شرط رو با دیتابیستون اجرا کنید و از خروجی اون که درون گرید هست با کد دوستمون خروجی نهیه کنید

راه حل دیگه ای نداره؟؟؟؟؟؟؟؟؟؟؟؟
کد هایی که خودم گذاشتم با دیتاست نمیشه هیچ کاری انجام داد؟؟؟؟؟

hamidrezax1
شنبه 14 مرداد 1396, 19:56 عصر
چرا دوست عزیز میشه منتحی بایستی کدهاتون رو بیشتر کنید درون هر حلقه مینونین شرطی رو که میخواین قرار بدین.اما دستور between به نظرم رو دیتابیس خوب جواب میده