是这样的,一个form上面有一个dataGridView和32个button,我想在dataGridView显示数据之后,把32个按钮都放到dataGridView最右边的4*8个cell里面,都是奇怪的是,按照下面的代码,按钮的位置是改变了。但是中间有一部分按钮不显示在dataGridView上面,奇怪望解答。。
每个按钮都调用了。位置也改变了。。我调试,位置也是显示在对应的cell上,按钮visible也是true,但是就是中间一些显示不了。。
不明白个中原理,期待解答 private void ShowButtonOnDataGridView()//显示按钮到dataGridView1
{
int max = dataGridView1.ColumnCount;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SetButton((Button)Controls["button0" + (i + 1).ToString() + "1"], i, max - 4);
SetButton((Button)Controls["button0" + (i + 1).ToString() + "2"], i, max - 3);
SetButton((Button)Controls["button1" + (i + 1).ToString() + "1"], i, max - 2);
SetButton((Button)Controls["button1" + (i + 1).ToString() + "2"], i, max - 1);
}
}
private void SetButton(Button bt,int row_index,int col_index)
{
Rectangle rect = dataGridView1.GetCellDisplayRectangle(col_index,row_index , false);
bt.Left = rect.Left + dataGridView1.Left+groupBox1.Left;
bt.Top = rect.Top + dataGridView1.Top+groupBox1.Top;
bt.Width = rect.Width;
bt.Height = rect.Height;
bt.Visible = true;
}
每个按钮都调用了。位置也改变了。。我调试,位置也是显示在对应的cell上,按钮visible也是true,但是就是中间一些显示不了。。
不明白个中原理,期待解答 private void ShowButtonOnDataGridView()//显示按钮到dataGridView1
{
int max = dataGridView1.ColumnCount;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SetButton((Button)Controls["button0" + (i + 1).ToString() + "1"], i, max - 4);
SetButton((Button)Controls["button0" + (i + 1).ToString() + "2"], i, max - 3);
SetButton((Button)Controls["button1" + (i + 1).ToString() + "1"], i, max - 2);
SetButton((Button)Controls["button1" + (i + 1).ToString() + "2"], i, max - 1);
}
}
private void SetButton(Button bt,int row_index,int col_index)
{
Rectangle rect = dataGridView1.GetCellDisplayRectangle(col_index,row_index , false);
bt.Left = rect.Left + dataGridView1.Left+groupBox1.Left;
bt.Top = rect.Top + dataGridView1.Top+groupBox1.Top;
bt.Width = rect.Width;
bt.Height = rect.Height;
bt.Visible = true;
}
解决方案 »
- NetworkStream 发送和接收大数据包
- 怎样用自定义控件编辑DataGridView(WinForm)单元格的值?
- 如何获得一个null引用的类型 + 如何获得数组元素的类型
- XtraGrid问题(有使用经验者请进)解决立马结贴
- 未处理的"System.InvalidOperationException"类型的异常出现在system.windows.forms.dll中。其它信息: DragDrop 注册失败。
- C#求高手帮忙给完善下这个程序,
- .net元数据
- 请教个文件夹遍历匹配的问题
- C#对不可见的水印的图片或文字的的提取
- 请大虾教小弟一招
- c#中读取数据库内时间,然后显示出来!
- VS2010工具箱中没有参数控件 没办法传递参数了 跪求解决方案!
1、所有的按钮都在同一个父控件里面。
2、所有的按钮应该都显示在DataGridView前面。可以在设计器里对所有的按钮进行“置于顶端”的操作。不过我不明白的是,为什么要用这种方法为每行加按钮啊,多累,为什么不直接用按钮列呢?
System.Windows.FormsDataGridViewButtonColumn
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridviewbuttoncolumn(v=vs.80).aspx
运行时就没了啊-----------------------
刷新界面啊refresh();
{
List<FillData> lstFillData = new List<FillData>(8); for (int nI = 0; nI < 8; nI++)
{
FillData fd = new FillData();
fd.Text = nI.ToString();
fd.A1 = "";
fd.A2 = "";
fd.A3 = "";
fd.A4 = ""; lstFillData.Add(fd);
} dataGridView1.DataSource = lstFillData;
dataGridView1.Update(); ShowButtonOnDataGridView();
} private void ShowButtonOnDataGridView()//显示按钮到dataGridView1
{
int max = dataGridView1.ColumnCount; int index = 3;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SetButton((Button)Controls["button" + (index++).ToString()], i, max - 4);
SetButton((Button)Controls["button" + (index++).ToString()], i, max - 3);
SetButton((Button)Controls["button" + (index++).ToString()], i, max - 2);
SetButton((Button)Controls["button" + (index++).ToString()], i, max - 1);
}
}
private void SetButton(Button bt, int row_index, int col_index)
{
Rectangle rect = dataGridView1.GetCellDisplayRectangle(col_index, row_index, false);
bt.Left = rect.Left + dataGridView1.Left;
bt.Top = rect.Top + dataGridView1.Top;
bt.Width = rect.Width;
bt.Height = rect.Height;
bt.Visible = true;
}public class FillData
{
private string text; public string Text
{
get { return text; }
set { text = value; }
} private string a1; public string A1
{
get { return a1; }
set { a1 = value; }
} private string a2; public string A2
{
get { return a2; }
set { a2 = value; }
} private string a3; public string A3
{
get { return a3; }
set { a3 = value; }
} private string a4; public string A4
{
get { return a4; }
set { a4 = value; }
}
}
//没试出有什么奇怪 测试的是把四个按钮移到第一行的四列上
private void btnRemove_Click(object sender, EventArgs e)
{
//假设行高列宽都相等 则共用
Int32 height = dataGridView1.Rows[0].Height;
Int32 width = dataGridView1.Columns[0].Width; if(dataGridView1.Rows.Count>0)
{
Int32 top = dataGridView1.Top + dataGridView1.ColumnHeadersHeight;
Int32 left = dataGridView1.Left + dataGridView1.RowHeadersWidth;
for (int i = 0; i < 4; i++)
{
Button btn = (Button)this.Controls["button" + (i+1).ToString()];
if (i <= 0)
{
btn.Left = left;
btn.Width = width;
btn.Top = top;
btn.Height = height; }
else
{
btn.Left = left + i*width;
btn.Width = width;
btn.Top = top;
btn.Height = height;
}
}
}
}
private void btnRemove_Click(object sender, EventArgs e)
{
//假设函告列宽都相等 则共用
Int32 height = dataGridView1.Rows[0].Height;
Int32 width = dataGridView1.Columns[0].Width; if(dataGridView1.Rows.Count>0)
{
Int32 top = dataGridView1.Top + dataGridView1.ColumnHeadersHeight;
Int32 left = dataGridView1.Left + dataGridView1.RowHeadersWidth;
for (int i = 0; i < 4; i++)
{
Button btn = (Button)this.Controls["button" + (i+1).ToString()];
if (i <= 0)
{
btn.Left = left;
btn.Width = width;
btn.Top = top;
btn.Height = height; }
else
{
btn.Left = left + i*width;
btn.Width = width;
btn.Top = top;
btn.Height = height;
}
}
}
}