积极答复者
关于循环创建DataGridView并手动赋值的疑问·······

问题
-
private void ceshi(int year,int month){
List<DataGridView> list = new List<DataGridView>();for (int i = 0; i < month; i++){int dayNum = DateTime.DaysInMonth(year, i+1);DataGridView dgvn = new DataGridView();dgvn.ColumnHeadersHeight = 40;dgvn.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;dgvn.Dock = DockStyle.Top;dgvn.Height = dayNum*20+70;
foreach (DataGridViewTextBoxColumn dgvc in dataGridView1.Columns){DataGridViewTextBoxColumn dgvcNew = new DataGridViewTextBoxColumn();dgvcNew.DataPropertyName = dgvc.DataPropertyName;dgvcNew.HeaderText = dgvc.HeaderText;dgvn.Columns.Add(dgvcNew);}list.Add(dgvn);}
//循环添加到Panel中去for (int i = list.Count; i > 0; i--){//获取对应的要添加的DataGridViewDataGridView dgvn = list[i-1];
int dayNum = DateTime.DaysInMonth(year, i);for (int i_temp = 1; i_temp <= dayNum; i_temp++){dgvn.Rows.Add(1);//可以自己设置要绑定的数据,到每一条上dgvn.Rows[i_temp].Cells[0].Value = i;dgvn.Rows[i_temp].Cells[1].Value = i * 10;dgvn.Rows[i_temp].Cells[2].Value = (i * 10).ToString() + "年";dgvn.Rows[i_temp].Cells[3].Value = (i * 10).ToString() + "W";}dgvn.Rows[1].Cells[0].Value = i;dgvn.Rows[1].Cells[1].Value = i * 10;dgvn.Rows[1].Cells[2].Value = (i * 10).ToString() + "年";dgvn.Rows[1].Cells[3].Value = (i * 10).ToString() + "W";
Label lb = new Label();lb.Height = 15;lb.Dock = DockStyle.Top;lb.Text = (i).ToString()+"月份";this.panel1.Controls.Add(lb);this.panel1.Controls.Add(dgvn);}}只要代码如上,传入的参数为,2009,12;在界面上创建了一个panel和一个4列的DataGridView;DatagridView隐藏
而使用以上方法得到的界面显示效果是,行数正确但所有DatagridView的单元格除了在循环外赋值的索引为一的行以外全部没有值为空的;***
请教下原因何在·
答案
-
没有进行数据源的绑定。而后我将代码改为如下形式以后,一切正常数据正常显示。
/// <summary>
/// 动态添加DataGridView
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">显示前几个月</param>
private void ceshi(int year,int month)
{
List<DataGridView> list = new List<DataGridView>();
for (int i = 0; i < month; i++)
{
int dayNum = DateTime.DaysInMonth(year, i+1);
DataGridView dgvn = new DataGridView();
dgvn.ColumnHeadersHeight = 40;
dgvn.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
dgvn.Dock = DockStyle.Top;
dgvn.Height = dayNum*20+70;
foreach (DataGridViewTextBoxColumn dgvc in dataGridView1.Columns)
{
DataGridViewTextBoxColumn dgvcNew = new DataGridViewTextBoxColumn();
dgvcNew.DataPropertyName = dgvc.DataPropertyName;
dgvcNew.HeaderText = dgvc.HeaderText;
dgvn.Columns.Add(dgvcNew);
}
list.Add(dgvn);
}
//循环添加到Panel中去
for (int i = list.Count; i > 0; i--)
{
//获取对应的要添加的DataGridView
DataGridView dgvn = list[i-1];
int dayNum = DateTime.DaysInMonth(year, i);
//dgvn = DBGV(dayNum, dgvn);
for (int numTemp = 0; numTemp < dayNum; numTemp++)
{
dgvn.Rows.Add(1);
dgvn.Rows[numTemp].Cells[0].Value = numTemp+1;
dgvn.Rows[numTemp].Cells[1].Value = i * 10;
dgvn.Rows[numTemp].Cells[2].Value = (i * 10).ToString() + "年";
dgvn.Rows[numTemp].Cells[3].Value = (i * 10).ToString() + "W";
}
Label lb = new Label();
lb.Height = 15;
lb.Dock = DockStyle.Top;
lb.Text = (i).ToString()+"月份";
this.panel1.Controls.Add(lb);
this.panel1.Controls.Add(dgvn);
}
}
而这段代码与上面几乎一样
- 已标记为答案 天驰 2010年10月18日 1:30
全部回复
-
没有进行数据源的绑定。而后我将代码改为如下形式以后,一切正常数据正常显示。
/// <summary>
/// 动态添加DataGridView
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">显示前几个月</param>
private void ceshi(int year,int month)
{
List<DataGridView> list = new List<DataGridView>();
for (int i = 0; i < month; i++)
{
int dayNum = DateTime.DaysInMonth(year, i+1);
DataGridView dgvn = new DataGridView();
dgvn.ColumnHeadersHeight = 40;
dgvn.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
dgvn.Dock = DockStyle.Top;
dgvn.Height = dayNum*20+70;
foreach (DataGridViewTextBoxColumn dgvc in dataGridView1.Columns)
{
DataGridViewTextBoxColumn dgvcNew = new DataGridViewTextBoxColumn();
dgvcNew.DataPropertyName = dgvc.DataPropertyName;
dgvcNew.HeaderText = dgvc.HeaderText;
dgvn.Columns.Add(dgvcNew);
}
list.Add(dgvn);
}
//循环添加到Panel中去
for (int i = list.Count; i > 0; i--)
{
//获取对应的要添加的DataGridView
DataGridView dgvn = list[i-1];
int dayNum = DateTime.DaysInMonth(year, i);
//dgvn = DBGV(dayNum, dgvn);
for (int numTemp = 0; numTemp < dayNum; numTemp++)
{
dgvn.Rows.Add(1);
dgvn.Rows[numTemp].Cells[0].Value = numTemp+1;
dgvn.Rows[numTemp].Cells[1].Value = i * 10;
dgvn.Rows[numTemp].Cells[2].Value = (i * 10).ToString() + "年";
dgvn.Rows[numTemp].Cells[3].Value = (i * 10).ToString() + "W";
}
Label lb = new Label();
lb.Height = 15;
lb.Dock = DockStyle.Top;
lb.Text = (i).ToString()+"月份";
this.panel1.Controls.Add(lb);
this.panel1.Controls.Add(dgvn);
}
}
而这段代码与上面几乎一样
- 已标记为答案 天驰 2010年10月18日 1:30