 |
|
|
 |
 |
|
ตรงส่วนนี้ตอนทำโปรเจค ผมก็เจอครับ ผมทำเป็น Win Application อะครับ แล้วก็ใช้ DataGripView เป็นตัวแสดงผล เช่นผมทำหน้า form มา 2 หน้า หน้า form1 เป็นหน้าแสดงอุปกรณ์ หน้า form2 เป็นหน้าเพิ่มอุปกรณ์ เมื่อเรารันโปรแกรมขึ้นมาเข้าไปดูหน้า form1 มันก็จะแสดงข้อมูลให้ดู แล้วพอเรากดไปหน้า form2 โดยให้หน้า form1 hide ไป แล้วก็ไปทำการเพิ่มอุปกรณ์ที่หน้า form2 พอเพิ่มเสร็จแล้วเราก็กลับมาดูที่หน้า form1 ใหม่อีกครั้ง แต่ว่าอุปกรณ์ที่เราเพิ่มไปมะกี้ มันก็ไมได้ถูกแสดงขึ้นมาด้วย เหมือนเป็นเพราะว่า หน้า form1 มันไม่ได้ถูกโหลดขึ้นมาใหม่ แต่ว่ามันแค่ ซ้อน(hide) ไปเท่านั้น เมื่อเป็นเช่นนี้ผมก็เลยแก่ปัญหาตอนที่จะไปหน้า form2 โดยให้หน้า form1 ปิดไปก่อน โดยใช้คำสั่ง close() ที่นี้หน้า form2 ยังไม่ทันแสดง โปรแกรมก็ปิดไปแล้ว
สุดท้ายผมก็เลยแก้ไขใหม่ โดยให้ DataGripView จะแสดงผลก็ต่อเหมือน Mousemove ที่นี้ก็จะไม่มีปัญหาในเรื่องโปรแกรมไม่แสดงผลที่เป็นของใหม่แล้ว เพราะว่าใช้ Event Mousemove แทนการ Refresh
(แต่มันก็เป็นหลักที่ไม่ถูกต้องนะ เป็นแค่การแก้ปัญหาเฉพาะหน้าเท่านั้น)
-----------------------------------------------------------------------------------------------------------------------------------------
ท่านใด มีวิธีแก้ไขวิธีอื่น ช่วยบอกด้วยครับ ผมเองก็อยากทราบเหมือนกัน
|
 |
 |
 |
 |
Date :
2010-02-21 21:50:44 |
By :
Nameless |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
event page index change ของกริด
|
 |
 |
 |
 |
Date :
2010-02-21 22:04:25 |
By :
iskong |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่ทราบว่า เป็น WinApp หรือ WebApp คะ
ถ้าเป็น WebApp ก้อ PostBask Code ใน Page_Load ก้อดึงข้อมูลมาแล้วค่ะ
ส่วนในกรณีของ Winapp คุณคนที่ 2 ลองใช้วิธี Dialog ดูปะคะ
หลักการคือ เวลา คุณเปิด form2 อย่า show() เฉยๆ
ให้ใช้ ShowDialoq แทน ใน Form2 ก้อใส่ control ในการแก้ไปค่ะ
จะ แก้ไขอะไรทำเต็มที่เลย
เพียงแต่มีข้อกำหนดว่า form ที่จะใช้ทำเป็น Dialog ต้องกำหนด
ปุ่มสองปุ่มคือ Property AcceptButton กับ CancelButton ไว้
และ Code ข้างในสำหรับ
AcceptButton คือ this.DialogResult = DialogResult.OK;
CancelButton คือ this.DialogResult = DialogResult.Cancel;
ค่ะ
และมี Property ที่ต้อง set ดังนี้
AcceptButton >> ชื่อปุ่มที่จะทำเป็นปุ่ม OK ให้ลากปุ่มไปวางก่อน แล้วจะปารกฏชื่อที่นี่ค่ะ
CancelButton >> ชื่อปุ่มที่จะทำเป็นปุ่ม Cancel เหมือนข้างบนค่ะ
FormBorderStyle >> FixedDialog
HelpButton >> true
MaximizeBox >> false
MinimizeBox >> false
ShowIcon >> false
ShowInTaskBar >> false
Start Position >> CenterParent
Size >> ตามใจฉัน
จะยกตัวอย่างเป็น FrameCode ไว้นะคะ
ใน code ที่ยกมามี Form1 เป็น Main form
ซึ่ง datagrid จะอยู่ที่นี่
ส่วน formDialoque เป็น window form ที่เปลี่ยนเป็น dialog ค่ะ
ลองแก้ดูนะคะ คงไม่เขียนมากไปกว่านี้แล้วนะคะ ^ ^
FORM1(MAIN)
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void buttonCallDialoqueLuvLuv_Click(object sender, EventArgs e)
{
if (((new formDialoque()).ShowDialog()) == DialogResult.OK)
{
MessageBox.Show("ผม ok นะคัฟเจ้านาย");
//myGridSource.DataSource = FunctionReBindData();
}
}
}
}
FORMDIALOQUE
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class formDialoque : Form
{
public formDialoque()
{
InitializeComponent();
}
private void formDialoque_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
//this.Close();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
}
}

|
 |
 |
 |
 |
Date :
2010-02-21 23:06:42 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณ ครับ ช่วย บอการ ทำ ปรับ Event Mousemove แทนการ Refresh หน่อย ครับ
ว่าทำไง ครับ ขอบคุณ ครับ ขอแก้ปัญหา เฉพาะ หน้าไปก่อนครับ รบกวน ช่วยบอก ที่
Event Mousemove แทนการ Refresh ปรับตรงไหนทำไง
|
 |
 |
 |
 |
Date :
2010-02-21 23:37:37 |
By :
นศ บ้านนอก |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มันเป็นนวิธีที่ผิดน่ะค่ะ เพราะต้องใช้ event movement
event นี้จะมาเรื่อยๆ ตลอดเวลาที่ mouse เคลื่อนไป
ไม่ลองย้ายมาที่ Form.Activated ดูละคะ
|
 |
 |
 |
 |
Date :
2010-02-22 01:20:58 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณพี่ blurEye และ พี่ iskong มากครับ
แต่ว่ารบกวนพี่ blurEyeขอตัวอย่าง FORM1(MAIN) และ FORMDIALOQUE เป็น code ของ vb.net ด้วยได้ป่าวครับ
ว่าแต่ Form.Activated อันนี้คือยังไงนะครับ ช่วยขยายความหน่อยได้ป่าวครับ
*ปล. รบกวนพี่ นศ บ้านนอก (เจ้าของกระทู้ ) ใช้ถามพี่ๆ เค้าด้วยคนนะครับ
|
 |
 |
 |
 |
Date :
2010-02-22 20:05:08 |
By :
Nameless |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จะขึ้นกระทูใหม่ให้นะคะ
|
 |
 |
 |
 |
Date :
2010-02-22 20:42:41 |
By :
blurEye |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมใช้วิธี clear คำสั่ง Dataset แล้วรีโหลด sub ที่แสดง datagridview ตัวอย่าง
Code (VB.NET)
Private Sub ReadData()
Dim sql As String = "select id_main,date_main,incexp,namelist,money_inc,money_exp,money_total,dep from Query1"
_cmd = New OleDbCommand(sql, _conn)
Dim adapter As New OleDbDataAdapter(_cmd)
_dataset = New DataSet 'ประการ dataset
adapter.Fill(_dataset, "showmain")
Me.DataGridView1.DataSource = _dataset.Tables("showmain")
End Sub
ในปุ่ม เพิ่ม,แก้ใข,ลบ ผมจะเพิ่มคำสั่ง นี้ไปด้วย
_dataset.Clear() คือ เครียดาต้าเซต
ReadData() โหลดใหม่
ตัวอย่าง
Code (VB.NET)
Private Sub bt_add_Click(sender As Object, e As EventArgs) Handles bt_add.Click
Dim numrow As Integer
Dim Sql1 = "select count(*) from Query1"
_cmd = New OleDbCommand(Sql1, _conn)
numrow = _cmd.ExecuteScalar()
If numrow = 0 Then
If Me.rd_inc.Checked = False And Me.rd_exp.Checked = False Then
MsgBox("กรุณาเลือกรายรับหรือรายจ่าย")
Return
End If
If Me.cb_list.SelectedValue = "1" Then
MsgBox("กรุณาเลือกรายการ")
Return
End If
If Me.txt_money.Text = "" Then
MsgBox("กรุณาระบุจำนวนเงิน")
Return
End If
Dim s As Boolean
If Me.rd_inc.Checked = True Then
s = True
End If
If Me.rd_exp.Checked = True Then
s = False
End If
Dim inc, exp, moneylast As Integer
If Me.rd_inc.Checked = True Then
inc = Me.txt_money.Text
exp = "0"
moneylast = Me.txt_money.Text
End If
If Me.rd_exp.Checked = True Then
inc = "0"
exp = Me.txt_money.Text
moneylast = Me.txt_money.Text
End If
Try
Dim sql As String = "insert into Query1(date_main,incexp,id_list,money_inc,money_exp,money_total,dep)values(@date_main,@incexp,@id_list,@money_inc,@money_exp,@money_total,@dep)"
_cmd = New OleDbCommand(sql, _conn)
_cmd.Parameters.AddWithValue("date_main", Me.dtp_date.Value)
_cmd.Parameters.AddWithValue("incexp", s)
_cmd.Parameters.AddWithValue("id_list", Me.cb_list.SelectedValue)
_cmd.Parameters.AddWithValue("money_inc", inc)
_cmd.Parameters.AddWithValue("money_exp", exp)
_cmd.Parameters.AddWithValue("money_total", moneylast)
_cmd.Parameters.AddWithValue("dep", Me.txt_dep.Text)
_cmd.ExecuteNonQuery()
MsgBox("บันทึกข้อมูลเรียบร้อย")
_dataset.Clear() ' เครียดาต้าเซต
ReadData() 'โหลดใหม่
showlist()
ClearText()
Readmoneytotal()
Return
Catch ex As Exception
MsgBox("ไม่สามารถบันทึกข้อมูลได้")
End Try
ผิดถูกยังใงก็ขออภัยมาด้ายนะครับ
|
 |
 |
 |
 |
Date :
2023-09-17 12:45:20 |
By :
mosaddzero |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|