|
|
|
C# WinApp สอบถามเรื่องการทำ HeaderCheckBox ใน DataGridView ครับ |
|
|
|
|
|
|
|
ลองทำดูก็น่าจะได้น่ะครับ
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 Test_Grid_CheckBox
{
public partial class Form1 : Form
{
CheckBox chkAll = new CheckBox();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void AddCheckAll()
{
Rectangle rect;
try
{
rect = new Rectangle();
chkAll.Size = new Size(14, 14);
rect.X = dataGridView1.RowHeadersWidth + (dataGridView1.Columns[0].Width/2)-6;
rect.Y = 5;
chkAll.Location = rect.Location;
chkAll.CheckedChanged += new System.EventHandler(new EventHandler(ckBox_CheckedChanged));
dataGridView1.Controls.Add(chkAll);
}
catch (Exception ex)
{
throw (new ApplicationException(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message));
}
}
private void button1_Click(object sender, EventArgs e)
{
int i;
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();
DataGridViewCheckBoxColumn chk1 = new DataGridViewCheckBoxColumn();
chk1.Name = "chk1";
col1.Name = "col1";
col2.Name = "col2";
chk1.HeaderText = "";
col1.HeaderText = "col1";
col2.HeaderText = "col2";
dataGridView1.Columns.Add(chk1);
dataGridView1.Columns.Add(col1);
dataGridView1.Columns.Add(col2);
dataGridView1.AllowUserToAddRows = false;
AddCheckAll();
for (i = 0; i <= 100; i++)
{
dataGridView1.Rows.Add(new object[] {0, i,"Test" });
}
}
private void ckBox_CheckedChanged(object sender, EventArgs e)
{
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
switch (chkAll.Checked)
{
case true:
dr.Cells[0].Value= 1;
break;
case false:
dr.Cells[0].Value = 0;
break;
default:
dr.Cells[0].Value = 0;
break;
}
}
dataGridView1.CurrentCell = null;
}
}
}
|
|
|
|
|
Date :
2017-04-01 16:31:37 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ส่วนใหญ่ทุกฯ สมรภูมิ (บางอณาจักร)
--- ผมคือพลทหารโปรแกรมเมอร์ รางวัลที่ได้คือ "ความตาย" นับว่าเป็นเกียริตยศ อันสูงส่ง
(...)
แต่ในความเป็นจริง ผมก็มีอณาจักรเล็กฯ (แน่นอนว่านับไพร่พล) ผมไม่อาจจะสู้ได้
...
...
...
...
ผมเข้าใจในคำว่า "คุณธรรม"
ปล. ผมคิดแค่เล็กฯน้อยฯ (เจ้าแคว้นใหญ่) สะเทือน +55555
|
|
|
|
|
Date :
2017-04-01 20:05:48 |
By :
หน้าฮี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@TOR_CHEMISTRY
คนฯหนึ่งทำให้อีกคนหนึ่งลังเลได้
--- นับว่าเป็นยอดคน
ปล. ไม่พูดเขายังไม่รู้ว่าเราคิดอย่างไร (พูดแล้วทำให้คนอื่นฯรู้ว่าเราโง่จริงฯและไม่ได้แกล้งโง่)
แต่เมื่อไหร่ก็ตามที่เราพูด/แสดงออกไป และทำให้เขารู้สึกว่า "เราไม่ฉลาดเหมือนเดิม" อันนี้เป็นเรื่องใหญ่
แต่มันอาจจะเล็กก็ได้ (ผมคาดเดาได้แต่ผมไม่สามารถรับรองผลลัพธ์ของการเดาได้ 100%)
...
...
...
|
|
|
|
|
Date :
2017-04-01 20:12:19 |
By :
หน้าฮี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2017-04-01 21:25:19 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองดูอันนี้ครับ
้เห็นมีย้ายตำแหน่งด้วย
http://csharp.ihavenomoney.co.kr/?p=290
|
|
|
|
|
Date :
2017-04-03 09:08:12 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เห็นบางคนบอกให้ Freeze Columns ไว้อะ่คัรบ
มันจะได้ไม่เคลื่อนไปไหน
|
|
|
|
|
Date :
2017-04-03 10:42:16 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าจะได้น่ะครับ
http://stackoverflow.com/questions/12642348/datagridview-custom-column-header-content-checkbox-control
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 Test_Grid_CheckBox
{
public partial class Form1 : Form
{
CheckBox chkAll = new CheckBox();
private int headerCheckboxRightMargin;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void AddCheckAll()
{
Rectangle rect;
try
{
rect = new Rectangle();
chkAll.Size = new Size(14, 14);
rect.X = dataGridView1.RowHeadersWidth + (dataGridView1.Columns[0].Width/2)-6;
rect.Y = 5;
chkAll.Location = rect.Location;
chkAll.CheckedChanged += new System.EventHandler(new EventHandler(ckBox_CheckedChanged));
dataGridView1.Controls.Add(chkAll);
}
catch (Exception ex)
{
}
}
private void button1_Click(object sender, EventArgs e)
{
int i;
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();
DataGridViewCheckBoxColumn chk1 = new DataGridViewCheckBoxColumn();
chk1.Name = "chk1";
col1.Name = "col1";
col2.Name = "col2";
chk1.HeaderText = "";
col1.HeaderText = "col1";
col2.HeaderText = "col2";
dataGridView1.Columns.Add(chk1);
dataGridView1.Columns.Add(col1);
dataGridView1.Columns.Add(col2);
dataGridView1.AllowUserToAddRows = false;
AddCheckAll();
for (i = 0; i <= 100; i++)
{
dataGridView1.Rows.Add(new object[] {0, i,"Test" });
}
var checkboxHeaderCellRect = dataGridView1.GetCellDisplayRectangle(0, -1, false);
headerCheckboxRightMargin = (checkboxHeaderCellRect.Width - chkAll.Width) / 2;
}
private void ckBox_CheckedChanged(object sender, EventArgs e)
{
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
switch (chkAll.Checked)
{
case true:
dr.Cells[0].Value= 1;
break;
case false:
dr.Cells[0].Value = 0;
break;
default:
dr.Cells[0].Value = 0;
break;
}
}
dataGridView1.CurrentCell = null;
}
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == 0)
ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex);
}
private void ResetHeaderCheckBoxLocation(int ColumnIndex, int RowIndex)
{
Rectangle oRectangle = this.dataGridView1.GetCellDisplayRectangle(ColumnIndex, RowIndex, false);
Point oPoint = new Point();
oPoint.X = oRectangle.Location.X + (oRectangle.Width - headerCheckboxRightMargin - chkAll.Width);
oPoint.Y = oRectangle.Location.Y + (oRectangle.Height - chkAll.Height) / 2 + 1;
if (oPoint.X < oRectangle.X)
{
chkAll.Visible = false;
}
else
{
chkAll.Visible = true;
}
chkAll.Location = oPoint;
}
}
}
|
|
|
|
|
Date :
2017-04-03 10:50:14 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ TOR_CHEMISTRY ลองตาม คห.10 ดูครับ
ว่าพอจะใช้ได้ไหม
|
|
|
|
|
Date :
2017-04-03 15:19:58 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == 0)
ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex);
}
private void ResetHeaderCheckBoxLocation(int ColumnIndex, int RowIndex)
{
Rectangle oRectangle = this.dataGridView1.GetCellDisplayRectangle(ColumnIndex, RowIndex, false);
Point oPoint = new Point();
oPoint.X = oRectangle.Location.X + (oRectangle.Width - headerCheckboxRightMargin - chkAll.Width);
oPoint.Y = oRectangle.Location.Y + (oRectangle.Height - chkAll.Height) / 2 + 1;
if (oPoint.X < oRectangle.X)
{
chkAll.Visible = false;
}
else
{
chkAll.Visible = true;
}
chkAll.Location = oPoint;
}
เมื่อวานลองดูแล้วครับท่าน ไม่ได้เหมือนเดิม
|
|
|
|
|
Date :
2017-04-03 15:49:17 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วถ้าเราเอา checkbox ใส่ใน column จะได้ไม๊ครับ
ถ้าได้ต้องทำยังไงรึครับ
|
|
|
|
|
Date :
2017-04-03 15:53:04 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองก๊อปไปใหม่ทั้งหมดได้ไหมครับ
เพราะผมลองลากแล้ว checkbox มันก็หายไปน่ะครับ
|
|
|
|
|
Date :
2017-04-03 15:58:49 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 13 เขียนโดย : lamaka.tor เมื่อวันที่ 2017-04-03 15:49:17
รายละเอียดของการตอบ ::
มาแก้ข่าวครับ
ใช้ได้นะครับ
Code (C#)
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == 0)
ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex);
}
private void ResetHeaderCheckBoxLocation(int ColumnIndex, int RowIndex)
{
Rectangle oRectangle = this.dataGridView1.GetCellDisplayRectangle(ColumnIndex, RowIndex, false);
Point oPoint = new Point();
oPoint.X = oRectangle.Location.X + (oRectangle.Width - headerCheckboxRightMargin - chkAll.Width);
oPoint.Y = oRectangle.Location.Y + (oRectangle.Height - chkAll.Height) / 2 + 1;
if (oPoint.X < oRectangle.X)
{
chkAll.Visible = false;
}
else
{
chkAll.Visible = true;
}
chkAll.Location = oPoint;
}
พอดีเมื่อวานที่ทำมีแค่นี้ครับ
Code (C#)
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == 0) ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex);
}
private void ResetHeaderCheckBoxLocation(int ColumnIndex, int RowIndex)
{
//Get the column header cell bounds
Rectangle oRectangle = this.dataGridView1.GetCellDisplayRectangle(ColumnIndex, RowIndex, true);
Point oPoint = new Point();
oPoint.X = oRectangle.Location.X + (oRectangle.Width - chkAll.Width) / 2 + 1;
oPoint.Y = oRectangle.Location.Y + (oRectangle.Height - chkAll.Height) / 2 + 1;
//Change the location of the CheckBox to make it stay on the header
// MessageBox.Show(oPoint.ToString());
chkAll.Location = oPoint;
}
ขอบคุณมากๆครับ
|
|
|
|
|
Date :
2017-04-03 16:01:09 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2017-04-03 16:04:42 |
By :
fonfire |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|