我从DataTable中筛选出了满足条件的记录,并放到DataView中,然后把DataView绑定到了DataGird中。现在我如何修改DataGrid中指定的单元格呢??
直接修改DataGrid,会出现延时(不能及时显示到窗体中);采用直接修改DataView,可惜能循环修改所以记录,无法确定我指定的某行某列????
7 个解决方案
#1
直接在dataTable里找,
foreach(DataRow dr in dataTable.rows)
{
if(dr["字段名".equals(???)])//指定行
{
if(dr["字段名".equals(???)])//指定列
{
}
}
else
{
continue;
}
}
foreach(DataRow dr in dataTable.rows)
{
if(dr["字段名".equals(???)])//指定行
{
if(dr["字段名".equals(???)])//指定列
{
}
}
else
{
continue;
}
}
#2
找到以后,放到另外一个dataTable里,然后绑定新表
#3
livode(啊水) 兄:
我需要动态的,根据用户的点击筛选出不同记录,动态的放到DataView中,难道再动态的放到DataTable里并修改吗//
DataView从DataTable中提取后,是同步的,既然同步,我想应该是由某种机制,能找到DataView中某行在DataTable中对应的行,MSDN这样提了一下??还是没找到修改指定行//
我需要动态的,根据用户的点击筛选出不同记录,动态的放到DataView中,难道再动态的放到DataTable里并修改吗//
DataView从DataTable中提取后,是同步的,既然同步,我想应该是由某种机制,能找到DataView中某行在DataTable中对应的行,MSDN这样提了一下??还是没找到修改指定行//
#4
用户的点击可以获得点击某行的信息,如果是用户排序后再点击,那么就得到用户点击的具体某行的主键信息
通过主键,在dataTable中进行select选择,就可以得到需要修改的行了
通过主键,在dataTable中进行select选择,就可以得到需要修改的行了
#5
MyCommand = new SqlCommand("select * from ygwage where ygid LIKE " + "'"+ TextBox1.Text + "%" + "'AND wagedate BETWEEN @LowerDate AND @UpperDate", MyConnection);
MyCommand.Parameters.Add(new SqlParameter("@LowerDate", SqlDbType.DateTime));
MyCommand.Parameters["@LowerDate"].Value = Convert.ToDateTime(TextBox2.Text);
MyCommand.Parameters.Add(new SqlParameter("@UpperDate", SqlDbType.DateTime));
MyCommand.Parameters["@UpperDate"].Value = Convert.ToDateTime(TextBox3.Text);
SqlDataAdapter adapter=new SqlDataAdapter(MyCommand);
DataSet ds=new DataSet();
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataKeyField = "ygid";
DataGrid1.DataBind();
if(MyConnection.State!=ConnectionState.Closed)
MyConnection.Close();
if(this.DataGrid1.Items.Count<1)
{
Message.Text="没有你查询的内容!";
Message.Visible=true;
Button2.Enabled=false;
//Message1.Visible=false;
}
else
{
Message.Visible=false;
Button2.Enabled=true;
//循环对表格行做脚本,点击弹出新窗口
int i=0;
int mycount = DataGrid1.Items.Count;
string ygid = "";
string wagedate = "";
for(i=0;i<mycount;i++)
{
ygid = DataGrid1.DataKeys[i].ToString();
wagedate = DataGrid1.Items[i].Cells[6].Text;
//DataGrid1.Items[i].Attributes.Add("onclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//单击响应
//DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//双击响应
DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "&wagedate="+ wagedate +" ','','');");
} }
MyCommand.Parameters.Add(new SqlParameter("@LowerDate", SqlDbType.DateTime));
MyCommand.Parameters["@LowerDate"].Value = Convert.ToDateTime(TextBox2.Text);
MyCommand.Parameters.Add(new SqlParameter("@UpperDate", SqlDbType.DateTime));
MyCommand.Parameters["@UpperDate"].Value = Convert.ToDateTime(TextBox3.Text);
SqlDataAdapter adapter=new SqlDataAdapter(MyCommand);
DataSet ds=new DataSet();
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataKeyField = "ygid";
DataGrid1.DataBind();
if(MyConnection.State!=ConnectionState.Closed)
MyConnection.Close();
if(this.DataGrid1.Items.Count<1)
{
Message.Text="没有你查询的内容!";
Message.Visible=true;
Button2.Enabled=false;
//Message1.Visible=false;
}
else
{
Message.Visible=false;
Button2.Enabled=true;
//循环对表格行做脚本,点击弹出新窗口
int i=0;
int mycount = DataGrid1.Items.Count;
string ygid = "";
string wagedate = "";
for(i=0;i<mycount;i++)
{
ygid = DataGrid1.DataKeys[i].ToString();
wagedate = DataGrid1.Items[i].Cells[6].Text;
//DataGrid1.Items[i].Attributes.Add("onclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//单击响应
//DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//双击响应
DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "&wagedate="+ wagedate +" ','','');");
} }
#6
感谢各位,问题已解决:
方法一:直接修改DataView
foreach(DataRowView drv in myDataView)
{
if(满足条件)
{
drv["列名"] = "测试值";
}
}
方法二:修改DataView对应的父DataTable
foreach(DataRow dr in myDataTable.Rows)
{
if(满足条件)
{
dr["列名"] = "测试值";
}
}
前提:这里方法二,需要在DataTable中建立一个临时的键值,用来查找DataView中某行在DataTable中所对应的行,因为这里DataView是DataTable中满足条件的部分行。
给分结贴。。。。
方法一:直接修改DataView
foreach(DataRowView drv in myDataView)
{
if(满足条件)
{
drv["列名"] = "测试值";
}
}
方法二:修改DataView对应的父DataTable
foreach(DataRow dr in myDataTable.Rows)
{
if(满足条件)
{
dr["列名"] = "测试值";
}
}
前提:这里方法二,需要在DataTable中建立一个临时的键值,用来查找DataView中某行在DataTable中所对应的行,因为这里DataView是DataTable中满足条件的部分行。
给分结贴。。。。
#7
DataGridID.Columns[i].Rows[J]
#1
直接在dataTable里找,
foreach(DataRow dr in dataTable.rows)
{
if(dr["字段名".equals(???)])//指定行
{
if(dr["字段名".equals(???)])//指定列
{
}
}
else
{
continue;
}
}
foreach(DataRow dr in dataTable.rows)
{
if(dr["字段名".equals(???)])//指定行
{
if(dr["字段名".equals(???)])//指定列
{
}
}
else
{
continue;
}
}
#2
找到以后,放到另外一个dataTable里,然后绑定新表
#3
livode(啊水) 兄:
我需要动态的,根据用户的点击筛选出不同记录,动态的放到DataView中,难道再动态的放到DataTable里并修改吗//
DataView从DataTable中提取后,是同步的,既然同步,我想应该是由某种机制,能找到DataView中某行在DataTable中对应的行,MSDN这样提了一下??还是没找到修改指定行//
我需要动态的,根据用户的点击筛选出不同记录,动态的放到DataView中,难道再动态的放到DataTable里并修改吗//
DataView从DataTable中提取后,是同步的,既然同步,我想应该是由某种机制,能找到DataView中某行在DataTable中对应的行,MSDN这样提了一下??还是没找到修改指定行//
#4
用户的点击可以获得点击某行的信息,如果是用户排序后再点击,那么就得到用户点击的具体某行的主键信息
通过主键,在dataTable中进行select选择,就可以得到需要修改的行了
通过主键,在dataTable中进行select选择,就可以得到需要修改的行了
#5
MyCommand = new SqlCommand("select * from ygwage where ygid LIKE " + "'"+ TextBox1.Text + "%" + "'AND wagedate BETWEEN @LowerDate AND @UpperDate", MyConnection);
MyCommand.Parameters.Add(new SqlParameter("@LowerDate", SqlDbType.DateTime));
MyCommand.Parameters["@LowerDate"].Value = Convert.ToDateTime(TextBox2.Text);
MyCommand.Parameters.Add(new SqlParameter("@UpperDate", SqlDbType.DateTime));
MyCommand.Parameters["@UpperDate"].Value = Convert.ToDateTime(TextBox3.Text);
SqlDataAdapter adapter=new SqlDataAdapter(MyCommand);
DataSet ds=new DataSet();
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataKeyField = "ygid";
DataGrid1.DataBind();
if(MyConnection.State!=ConnectionState.Closed)
MyConnection.Close();
if(this.DataGrid1.Items.Count<1)
{
Message.Text="没有你查询的内容!";
Message.Visible=true;
Button2.Enabled=false;
//Message1.Visible=false;
}
else
{
Message.Visible=false;
Button2.Enabled=true;
//循环对表格行做脚本,点击弹出新窗口
int i=0;
int mycount = DataGrid1.Items.Count;
string ygid = "";
string wagedate = "";
for(i=0;i<mycount;i++)
{
ygid = DataGrid1.DataKeys[i].ToString();
wagedate = DataGrid1.Items[i].Cells[6].Text;
//DataGrid1.Items[i].Attributes.Add("onclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//单击响应
//DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//双击响应
DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "&wagedate="+ wagedate +" ','','');");
} }
MyCommand.Parameters.Add(new SqlParameter("@LowerDate", SqlDbType.DateTime));
MyCommand.Parameters["@LowerDate"].Value = Convert.ToDateTime(TextBox2.Text);
MyCommand.Parameters.Add(new SqlParameter("@UpperDate", SqlDbType.DateTime));
MyCommand.Parameters["@UpperDate"].Value = Convert.ToDateTime(TextBox3.Text);
SqlDataAdapter adapter=new SqlDataAdapter(MyCommand);
DataSet ds=new DataSet();
DataGrid1.DataSource = ds.Tables[0];
DataGrid1.DataKeyField = "ygid";
DataGrid1.DataBind();
if(MyConnection.State!=ConnectionState.Closed)
MyConnection.Close();
if(this.DataGrid1.Items.Count<1)
{
Message.Text="没有你查询的内容!";
Message.Visible=true;
Button2.Enabled=false;
//Message1.Visible=false;
}
else
{
Message.Visible=false;
Button2.Enabled=true;
//循环对表格行做脚本,点击弹出新窗口
int i=0;
int mycount = DataGrid1.Items.Count;
string ygid = "";
string wagedate = "";
for(i=0;i<mycount;i++)
{
ygid = DataGrid1.DataKeys[i].ToString();
wagedate = DataGrid1.Items[i].Cells[6].Text;
//DataGrid1.Items[i].Attributes.Add("onclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//单击响应
//DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");//双击响应
DataGrid1.Items[i].Attributes.Add("ondblclick","window.open('updatawage.aspx?ygid=" + ygid + "&wagedate="+ wagedate +" ','','');");
} }
#6
感谢各位,问题已解决:
方法一:直接修改DataView
foreach(DataRowView drv in myDataView)
{
if(满足条件)
{
drv["列名"] = "测试值";
}
}
方法二:修改DataView对应的父DataTable
foreach(DataRow dr in myDataTable.Rows)
{
if(满足条件)
{
dr["列名"] = "测试值";
}
}
前提:这里方法二,需要在DataTable中建立一个临时的键值,用来查找DataView中某行在DataTable中所对应的行,因为这里DataView是DataTable中满足条件的部分行。
给分结贴。。。。
方法一:直接修改DataView
foreach(DataRowView drv in myDataView)
{
if(满足条件)
{
drv["列名"] = "测试值";
}
}
方法二:修改DataView对应的父DataTable
foreach(DataRow dr in myDataTable.Rows)
{
if(满足条件)
{
dr["列名"] = "测试值";
}
}
前提:这里方法二,需要在DataTable中建立一个临时的键值,用来查找DataView中某行在DataTable中所对应的行,因为这里DataView是DataTable中满足条件的部分行。
给分结贴。。。。
#7
DataGridID.Columns[i].Rows[J]