2013-06-20 32 views
0

一個表格單元格內輸入框的,我有一些表格,看起來像這樣:提取數據出來,使用C#

<table width="650" id="myTable" runat="server"> 
    <tbody> 
     <tr> 
      <td><input type="text" /></td> 
      <td><input type="text" /></td> 
      <td><input type="text" /></td> 
      <td><input type="text" />&nbsp;</td> 
     </tr> 
     <tr> 
      <td><input type="text" /></td> 
      <td><input type="text" /></td> 
      <td><input type="text" /></td> 
      <td><input type="text" />&nbsp;</td> 
     </tr> 
     <tr> 
      <td><input type="text" /></td> 
      <td><input type="text" /></td> 
      <td><input type="text" /></td> 
      <td><input type="text" />&nbsp;</td> 
     </tr> 
    </tbody> 
</table> 

現在,我想撕毀的數據出來的那個並將其存儲在XML文件中。問題是行數未知。用戶可以創建3行到n行之間的任何地方。爲了解決這個問題,我寫了一個循環,將數據從表中逐出。

// Assume the relevant items are declared and assigned a proper value. 

     while (i < myTable.Rows.Count) 
     { 
      tRow = myTable.Rows[i]; 

      tNameNode.InnerText = tRow.Cells[0].InnerText; 
      tUnitsNode.InnerText = tRow.Cells[1].InnerText; 
      tValueNode.InnerText = tRow.Cells[2].InnerText; 

      tNewEntryNode.AppendChild(tNameNode); 
      tNewEntryNode.AppendChild(tUnitsNode); 
      tNewEntryNode.AppendChild(tValueNode); 

      tIntermediateNode.AppendChild(tNewEntryNode); 

      i++; 
     } 

現在有了這個之後,我跑那就是它不會獲取什麼是輸入框,只是實際的輸入框代碼,這是不是真的我想裏面有什麼,我才意識到這個問題。

如何獲取輸入框內的內容?

+0

您可以開發一些腳本來獲取生成的文本框的所有文本值,方法是分配所有相同的ID,然後讓腳本通過ID獲取值。然後將它存儲到您可以在您的C#代碼中訪問的變量 – Jfabs

回答

0

我所採用的解決方案是這樣的:

while (i < myTable.Rows.Count) 
    { 
     tRow = tblCropsAndFeed.Rows[i]; 

     string tInputBox0 = tRow.Cells[0].Controls[0].ClientID; 
     tContent = (HtmlInputText)tRow.FindControl(tInputBox0); 
     tNameNode.InnerText = tContent.Value; 

     string tInputBox1 = tRow.Cells[1].Controls[0].ClientID; 
     tContent = (HtmlInputText)tRow.FindControl(tInputBox1); 
     tUnitsNode.InnerText = tContent.Value; 

     string tInputBox2 = tRow.Cells[2].Controls[0].ClientID; 
     tContent = (HtmlInputText)tRow.FindControl(tInputBox2); 
     tValueNode.InnerText = tContent.Value; 

     tNewEntryNode.AppendChild(tNameNode); 
     tNewEntryNode.AppendChild(tUnitsNode); 
     tNewEntryNode.AppendChild(tValueNode); 

     tCropsAndFeedNode.AppendChild(tNewEntryNode); 

     i++; 
    } 

我遇到的大問題是C#爲處理輸入框作爲的DirectControl對象,這使得它非常不可能得到的東西出來。添加後

runat="server" 

然而,對於輸入框,一切都很好。

0

您可以開發一些腳本來獲取生成的文本框的所有文本值,方法是分配所有相同的ID,然後讓腳本通過ID獲取值。然後將其存儲到一個變量,你可以在你的C#代碼

的HTML爲您的文本框訪問,幷包括一個隱藏的文本框可能被填充使用腳本您的文本框的其餘部分的價值:

<input type="text" class="userTxtBox" /> 
<input type="hidden" Id="hiddenTxtBox" /> 

個人喜好的jQuery在這一點上(但我敢肯定,你可以做到任何腳本類似的東西):

$('body').live('input','.userTxtBox', function() { 
    $('#hiddenTxtBox').val($('.userTxtBox').val()); 
}); 

然後,在你的C#代碼,你可以抓住從hiddenTxtBox文本。

+0

問題在於Ids必須是唯一的。儘管我正在考慮做類似於類名的事情。 – mkautzm

+0

對,JQuery腳本正在尋找一類'userTxtBox'的輸入。但是,該特定位的腳本不起作用,語法錯誤。我只是在jsfiddle中嘗試過。 – Jfabs

+0

我很抱歉,我現在無法在我的小提琴中獲得正確的腳本代碼。但這是沿着正確的軌道。當我有更多時間時我會回來,但現在有些事情需要我注意。但別擔心,這個社區太棒了!至少它對我來說一直是這樣,別人會很快就會出現! – Jfabs

0

這是一個非常粗略的草圖,說明您正在做什麼的另一種方式,但從長遠來看可能比直接添加html更具可維護性。它看起來像你添加的行都遵循一些常見的模式,甚至代表一些常見的功能。 .NET webforms有一些明確的用於此目的:usercontrols。使用戶控制像

<% @ Control Language="C#" ClassName="InputRow" %> 
<table> 
    <tr> 
    <td><asp:textbox ... /></td> 
    <td><asp:textbox ... /></td> 
    <td><asp:textbox ... /></td> 
    <td><asp:textbox ... /></td> 
    </tr> 
</table> 

註冊到您的主頁。然後,而不是添加輸入框,使用

myTable.Controls.Add(new InputRow(... 

我的web表單固然有點生疏,你實際上可能沒有能夠直接添加到表類的控件屬性。如果失敗,您可以隨時將其添加到Asp:Panel對象的Controls屬性中。

這將更易於維護的原因是,您可以將輸入框的提取邏輯封裝在您的usercontrol中,並在其他頁面上使用它。在列表中跟蹤一組這些控件將使您能夠面向對象地遍歷所有這些控件並以結構化的方式提取它們的數據。