0
응용 프로그램은 항목을 데이터베이스로 작동하여 XML 문서에 씁니다. 이러한 항목은 DataGridview에 행으로 표시됩니다. 각 "입력"노드에는 "entryno"속성이 있습니다. 항목이 삭제 될 때마다이 "entryno"번호 매기기 순서가 끊어집니다. 위의 코드를 작성하는 동안 "entryno"를 증가시키기위한 코드를 구현할 수 있었지만 위의 코드를 시도하는 동안 좋은 결과를 얻지 못했습니다.항목을 삭제 한 후 모든 "entryno"속성의 번호 순서를 다시 설정하십시오.
private void Deletbtn_Click(object sender, EventArgs e)
{
XmlNode node = doc.SelectSingleNode("//entry[@entryno='" + Dgv.CurrentRow.Cells[0].Value + "']");
try
{
if (node != null && Dgv.CurrentRow.Selected == true)
{
doc.DocumentElement.RemoveChild(node);
// Trying to refresh the sequence each time an node is deleted.
int Attrno = int.Parse(doc.SelectSingleNode("//entry[@entryno]").Value);
do
{
Attrno = 0;
Attrno++;
} while (Attrno < doc.ChildNodes.Count);
doc.SelectSingleNode("//entry[@entryno]").InnerText = Attrno.ToString();
doc.Save(Application.StartupPath + @"\SleepRecords.xml");
}
else
MessageBox.Show("Click the left side of the grid to select a row to delete.", "Select row", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
ReloadData();
Resetbtn_Click(Deletbtn, e);
makePdf();
}
FYI, 이것은 내가 작성한 각 새 항목 (관련 코드 조각)에서 "entryno"속성을 증가시키는 방법입니다.
XmlNodeList nodes = doc.SelectNodes("//entry");
int max = 0;
foreach (XmlNode node in nodes)
{
int nodeAttr = int.Parse(node.Attributes["entryno"].Value);
max = nodeAttr;
}
max++;
항목 데이터를 저장하는 Xml 문서. DataGridview는 여기에서 정보를 가져옵니다.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- These are the entries -->
<entries>
<entry entryno="1">
<weekday>Saturday</weekday>
<date>16/12/2017</date>
<time>21:42</time>
<action>Out of bed</action>
<mind>Ok</mind>
<body>Ok</body>
</entry>
<entry entryno="2">
<weekday>Sunday</weekday>
<date>17/12/2017</date>
<time>02:56</time>
<action>Awake in bed</action>
<mind>Ok</mind>
<body>Ok</body>
</entry>
<entry entryno="3">
<weekday>Sunday</weekday>
<date>17/12/2017</date>
<time>03:07</time>
<action>Awakening</action>
<mind>Ok</mind>
<body>Ok</body>
</entry>
<entry entryno="4">
<weekday>Sunday</weekday>
<date>17/12/2017</date>
<time>03:18</time>
<action>Awakening</action>
<mind>Ok</mind>
<body>Ok</body>
</entry>
<entry entryno="5">
<weekday>Sunday</weekday>
<date>17/12/2017</date>
<time>03:38</time>
<action>Out of bed</action>
<mind>Ok</mind>
<body>Ok</body>
</entry>
</entries>
도움 주셔서 감사합니다.
나는 카운트 정수 속성 값도 "entryno"문자열을 구문 분석 후 Deletebtn_Click 이벤트하지만 성공하지 솔루션을 구현하기 위해 노력했다. 다행히도 코드가 모든 "entryno"속성 문자열을 정수로 변환해야 정수 정수를 증가시키고 각각에 대한 반복의 문자열 값 (문자열로 다시 변환)을 반환 할 수 있습니다. 속성. 결과 문자열을 증가시키기 전에 특성 문자열을 구문 분석 한 다음 속성 값으로 할당 할 문자열로 다시 변환해야합니다. TY. – Diezus
나는 복잡 할 필요가없는 것을 복잡하게 만들고있었습니다. 당신의 해결책은 정확했습니다. 감사. – Diezus