【发布时间】:2021-01-22 14:44:10
【问题描述】:
我有一个 xml 文件 (XMLFile1.xml)。
我执行了以下操作,但 datagridview 排序未正确完成。
例如我有这 5 行和 2 列:
| Id | Value |
|---|---|
| 1 | before- |
| 2 | co- |
| 3 | -ly |
| 4 | -ing |
| 5 | after- |
但是当我点击datagridview的表头时,排序的结果是:
| Id | Value |
|---|---|
| 1 | before- |
| 2 | co- |
| 4 | -ing |
| 3 | -ly |
| 5 | after- |
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.ColumnCount = 2;
dataGridView1.RowCount = 5;
dataGridView1.Columns[0].Name = "Radif";
dataGridView1.Columns[1].Name = "Root";
dataGridView1.Columns[1].SortMode = DataGridViewColumnSortMode.Automatic;
dataGridView1.AutoGenerateColumns = true;
string myXMLfile = @"C:\Users\PC\Desktop\XMLFile1.xml";
DataSet ds = new DataSet();
ds.ReadXml(myXMLfile);
DataTable dt = ds.Tables["XMLFile1"];
for (int i = 0; i < dt.Rows.Count; i++)
{
dataGridView1.Rows[i].Cells[0].Value = dt.Rows[i][0].ToString();
dataGridView1.Rows[i].Cells[1].Value = dt.Rows[i][1].ToString();
}
}
编辑1:
XMLFile1.xml
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="XMLFile1.xsd" generated="2016-03-09T13:36:40">
<XMLFile1>
<Radif>1</Radif>
<Root>before-</Root>
</XMLFile1>
<XMLFile1>
<Radif>2</Radif>
<Root>co-</Root>
</XMLFile1>
<XMLFile1>
<Radif>3</Radif>
<Root>-ly</Root>
</XMLFile1>
<XMLFile1>
<Radif>4</Radif>
<Root>-ing</Root>
</XMLFile1>
<XMLFile1>
<Radif>5</Radif>
<Root>after-</Root>
</XMLFile1>
</dataroot>
我点击datagridview的第二列(根列)。
EDIT2:
我添加了这段代码,但我的问题没有解决:
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dataGridView1.Refresh();
dataGridView1.ClearSelection();
dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
dataGridView1.Rows[0].Selected = true;
}
编辑 3:
private void Form1_Load(object sender, EventArgs e)
{
string myXMLfile = @"C:\Users\PC\Desktop\XMLFile1.xml";
ds = new DataSet();
ds.ReadXml(myXMLfile);
dt = ds.Tables["XMLFile1"];
dataGridView1.DataSource = dt;
}
我有一个用于向 XML 文件和 datagridview1 添加行的按钮。当我添加行时,最后一行(添加的行)参与排序,但我希望将新数据添加到 datagridview1 的末尾并通过单击 datagridview1 标题进行排序。
private void buttonAdd_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\Users\PC\Desktop\XMLFile1.xml");
XmlNode newElem = xmlDoc.CreateNode(XmlNodeType.Element, "XMLFile1", null);
XmlNode newElemRadif = xmlDoc.CreateElement("Radif");
newElemRadif.InnerText = tbRaAdd.Text;
newElem.AppendChild(newElemRadif);
XmlNode newElemName = xmlDoc.CreateElement("Root");
newElemName.InnerText = tbRoAdd.Text;
newElem.AppendChild(newElemName);
xmlDoc.DocumentElement.AppendChild(newElem);
xmlDoc.Save(@"C:\Users\PC\Desktop\XMLFile1.xml");
DataRow dr = dt.NewRow();
dr["Radif"] = tbRaAdd.Text;
dr["Root"] = tbRoAdd.Text;
dt.Rows.Add(dr);
}
编辑 4:
我做了这些,我的问题解决了:
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.ColumnCount = 2;
dataGridView1.Columns[0].Name = "Radif";
dataGridView1.Columns[1].Name = "Root";
string myXMLfile = @"C:\Users\PC\Desktop\XMLFile1.xml";
ds = new DataSet();
ds.ReadXml(myXMLfile);
dt = ds.Tables["XMLFile1"];
dataGridView1.RowCount = dt.Rows.Count + 1;
for (int i = 0; i < dt.Rows.Count; i++)
{
dataGridView1.Rows[i].Cells[0].Value = dt.Rows[i][0].ToString();
dataGridView1.Rows[i].Cells[1].Value = dt.Rows[i][1].ToString();
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\Users\PC\Desktop\XMLFile1.xml");
XmlNode newElem = xmlDoc.CreateNode(XmlNodeType.Element, "XMLFile1", null);
XmlNode newElemRadif = xmlDoc.CreateElement("Radif");
newElemRadif.InnerText = tbRaAdd.Text;
newElem.AppendChild(newElemRadif);
XmlNode newElemName = xmlDoc.CreateElement("Root");
newElemName.InnerText = tbRoAdd.Text;
newElem.AppendChild(newElemName);
xmlDoc.DocumentElement.AppendChild(newElem);
xmlDoc.Save(@"C:\Users\PC\Desktop\XMLFile1.xml");
dataGridView1.Rows.Add(1);
dataGridView1.Rows[dataGridView1.Rows.Count - 2].Cells[0].Value = tbRaAdd.Text;
dataGridView1.Rows[dataGridView1.Rows.Count - 2].Cells[1].Value = tbRoAdd.Text;
}
【问题讨论】:
-
我已对您的表格进行了格式化,如果它们不符合预期,请随时重新编辑
-
数字和文字在同一列吗?如果没有,您单击的是哪个标题?如果您在问题中包含 XML 的内容,这将有助于理解会发生什么。
-
这里不错。
标签: c# sorting datagridview