关于修改DataView中指定行、列的值的问题???-----------------------在线等

时间:2022-10-14 20:05:47
大家好:
  我从DataTable中筛选出了满足条件的记录,并放到DataView中,然后把DataView绑定到了DataGird中。现在我如何修改DataGrid中指定的单元格呢??
  直接修改DataGrid,会出现延时(不能及时显示到窗体中);采用直接修改DataView,可惜能循环修改所以记录,无法确定我指定的某行某列????

7 个解决方案

#1


直接在dataTable里找,
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这样提了一下??还是没找到修改指定行//

#4


用户的点击可以获得点击某行的信息,如果是用户排序后再点击,那么就得到用户点击的具体某行的主键信息
通过主键,在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 +" ','','');");
}  }

#6


感谢各位,问题已解决:
  方法一:直接修改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;
    }
}

#2


找到以后,放到另外一个dataTable里,然后绑定新表

#3


livode(啊水) 兄: 
我需要动态的,根据用户的点击筛选出不同记录,动态的放到DataView中,难道再动态的放到DataTable里并修改吗//
DataView从DataTable中提取后,是同步的,既然同步,我想应该是由某种机制,能找到DataView中某行在DataTable中对应的行,MSDN这样提了一下??还是没找到修改指定行//

#4


用户的点击可以获得点击某行的信息,如果是用户排序后再点击,那么就得到用户点击的具体某行的主键信息
通过主键,在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 +" ','','');");
}  }

#6


感谢各位,问题已解决:
  方法一:直接修改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]