> Как правильно обращаться к строкам?
Через DataGridView ... ниже в примере есть разные способы поиска необходимой строки и изменения значения:
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
ds = new DataSet();
ds.ReadXml(new StringReader(
@"<data>
<item type='t1' value='v1' />
<item type='t2' value='v2' />
<item type='t1' value='v3' />
<item type='t2' value='v4' />
<item type='t1' value='v5' />
</data>"));
ds.DefaultViewManager.DataViewSettings["item"].RowFilter = "type='t1'";
DataGridView dgv = new DataGridView();
dgv.Dock = DockStyle.Fill;
dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dgv.Parent = this;
dgv.DataMember = "item";
dgv.DataSource = ds;
dgv.AllowUserToAddRows = false;
dgv.MouseClick += delegate(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo ht = dgv.HitTest(e.X, e.Y);
if (ht.Type == DataGridViewHitTestType.Cell)
{
DataRowView drv = ds.Tables["item"].DefaultView[ht.RowIndex];
drv["value"] += "HIT";
}
};
this.Menu = new MainMenu(new MenuItem[] {
new MenuItem("ChangeCurrent", delegate { ChangeCurrent(); }),
new MenuItem("FindAndChange", delegate { FindAndChange(); }),
new MenuItem("ChangeSpecial", delegate { ChangeSpecial(); }),
});
}
private DataSet ds;
private void ChangeCurrent()
{
BindingManagerBase bmb = this.BindingContext[ds, "item"];
DataRowView drv = (DataRowView)bmb.Current;
if (string.Equals(drv["value"], "v5"))
{
MessageBox.Show("Disabled for v5");
return;
}
drv["value"] = DateTime.Now.ToString();
bmb.EndCurrentEdit(); // чтобы DataGridView обновил ячейку
}
private void FindAndChange()
{
DataRow[] rows = ds.Tables["item"].Select("value LIKE 'v5*'");
foreach (DataRow row in rows)
row["value"] += "!";
}
private void ChangeSpecial()
{
DataRowView drv = ds.Tables["item"].DefaultView[1];
drv["value"] = "hello: " + DateTime.Now.Millisecond;
}
}
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 29 May 2008 23:59
|