0

私はaspの初心者ですが、テーブルの動的更新を実行しようとすると、奇妙な問題が発生します。
最初にページの読み込み時に、xmlファイルからデータを取得してテーブルに追加します。この部分は問題なく、データはページに表示されています。
2番目の部分は、テーブルの更新されたデータをファイルに書き戻そうとすると、空のファイルが返されます。デバッグモードで値を確認した後、HtmlTableインスタンスを取得し、Row属性を確認すると、ヘッダー行である行が1つしかないようです。

テーブル宣言の添付:

<table id="users" class="ui-widget ui-widget-content" runat="server">     
<thead> 
<tr class="ui-widget-header ">          
<th>Title</th>                       
<th>Link From Ibms</th> 
<th>Dismiss</th>    
</tr> 
</thead>   
</table>

サーバーの読み取りおよび書き込み機能:

 private void readLinkXml()
    {
        if (!File.Exists(path))                                                          //   no file.
            return;

        XmlTextReader reader = new XmlTextReader(path);
        reader.WhitespaceHandling = WhitespaceHandling.None;
    //    reader.Read();

        while (!reader.EOF)                                                              //  load loop
        {

            if ((reader.Name == "ChannelMap" && !reader.IsStartElement()))
            {
                break;
            }

            while ((reader.Name != "links" || !reader.IsStartElement()))
                reader.Read();                                                          // advance to next <links> tag

            HtmlTableRow row = new HtmlTableRow();

            HtmlTableCell title = new HtmlTableCell();
            title.InnerHtml = reader.GetAttribute("TITLE");                             // get link title.
            row.Cells.Add(title);
            HtmlTableCell link = new HtmlTableCell();
            link.InnerHtml = reader.GetAttribute("VOD_URL");                            // get link url.
            row.Cells.Add(link);
            HtmlTableCell buttonCell = new HtmlTableCell();
            buttonCell.Attributes.Add("id", "table_button");
            row.Cells.Add(buttonCell);

            users.Rows.Add(row);                                                        //  add xml asset as row in link table.                         
            reader.Read();                                                              // and now either at <links> tag or </ChannelMap
        }


        reader.Close();
    }


    private void writeLinksXml()
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.IndentChars = "  ";
        settings.NewLineChars = "\r\n";
        settings.NewLineHandling = NewLineHandling.Replace;
        XmlWriter writer = XmlWriter.Create(path, settings);

        writer.WriteStartDocument();
        writer.WriteStartElement("ChannelMap");

        bool first = true;

        foreach (HtmlTableRow row in users.Rows)
        {
            if (first)
            {
                first = false;
                continue;
            }

            writer.WriteStartElement("links");
            writer.WriteAttributeString("TITLE", row.Cells[0].InnerText);
            writer.WriteAttributeString("VOD_URL", row.Cells[1].InnerText);
            writer.WriteEndElement();
        }

        writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Close();
    }  

テーブルに追加したばかりのデータを取得できない理由を誰かが知っていますか?

ありがとう、
モシェ

4

2 に答える 2

1

まあ、それはすべてがaspnetでビューステートが必要な理由と呼ばれる問題と思われます。
あなたの質問から、あなたはデータをバインドしていると思います、Page_Load()そしてあなたはまた使用したかもしれません

Page.IsPostBack

これは良いことです。

ここで、ポストバックを行うときは、同じコントロールをバインドしていることを確認する必要があります(GridView、DataListが何であるかは関係ありません...)。

したがって、XMLファイルを使用した呼び出しを減らしたい場合は、ポストバックごとに再度バインドするか、データをViewStateに入れてください。

于 2012-12-18T12:06:43.310 に答える
0

readLinkXml()あなたのページので起こることを確認しPage_Initてください。
それ以外の場合、PostBack時にビューステートが行を更新しようとすると、データが見つからず、値を変更できません。

于 2012-12-18T11:42:22.293 に答える