2013-07-01 16 views
0

好,因爲沒有人能夠確定爲什麼my DataTable could not get the updated GridView data,我現在試圖直接從GridView獲取值。爲什麼在讀取GridViewRow文本值時會得到空字符串?

現在的問題是,我從閱讀GridViewRows獲得的文本值都是空字符串。

這裏是我的代碼:

ASPX Markup code for the GridView: 

<asp:gridview ID="ESBAndTSRValuesInputGridView" runat="server" ShowFooter="true" AutoGenerateColumns="false"> 
    <Columns> 
    <asp:BoundField DataField="AwardID" HeaderText="Award ID" Visible="false" /> 
    <asp:BoundField DataField="AwardName" HeaderText="Award Name" /> 
    <asp:TemplateField HeaderText="ESBValue"> 
     <ItemTemplate> 
      <asp:TextBox ID="ESBValue" Text='<%# Eval("ESBValue") %>' runat="server"></asp:TextBox> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="TSRValue"> 
     <ItemTemplate> 
      <asp:TextBox ID="TSRValue" Text='<%# Eval("TSRValue") %>' runat="server"></asp:TextBox> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:gridview> 

從點擊一個按鈕的隱藏代碼初始化GridView的數據:

DataTable dt = new DataTable(); 
dt.Columns.Add(new DataColumn("AwardID", typeof(string))); 
dt.Columns.Add(new DataColumn("AwardName", typeof(string))); 
dt.Columns.Add(new DataColumn("ESBValue", typeof(string))); 
dt.Columns.Add(new DataColumn("TSRValue", typeof(string))); 
DataRow[] PSPAwards = dtAwards.Select("AWARDTYPE = 'PSP'"); 
foreach (DataRow dr in PSPAwards) 
{ 
    dt.Rows.Add(dr["AWARDID"].ToString(), dr["AWARDNAME"].ToString(), "0", "100"); 
} 
ViewState["ESBAndTSRValuesDataTable"] = dt; 
ESBAndTSRValuesInputGridView.DataSource = dt; 
ESBAndTSRValuesInputGridView.DataBind(); 

嘗試讀取GridViewRow值:

for (int rowCount = 0; rowCount < ESBAndTSRValuesInputGridView.Rows.Count; rowCount++) 
{ 

    int cell0Val, cell1Val, cell2Val, cell3Val; 

    //input text is blank for all: 
    //TryParse returns false for all (because if I use Parse instead, exception occurs): 

    Int32.TryParse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[0].Text, out cell0Val); 
    Int32.TryParse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[1].Text, out cell1Val); 
    Int32.TryParse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[2].Text, out cell2Val); 
    Int32.TryParse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[3].Text, out cell3Val); 

    int val1 = Int32.Parse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[0].Text); 
    int val2 = Int32.Parse(dr["AWARDID"].ToString()); 

    if (val1 == val2) 
    { 
     rowIndex = rowCount; 
     break; 
    } 
} 

那麼如何在讀取GridViewRows時獲得實際的文本值?

我需要的綁定列以及在TextField的值..

而且我使用Visual Studio 2005和.NET 2.0框架..

回答

2

與此

取代你的最後一個塊的鱈魚

你不能直接得到文本框的值..你必須找到的ID控制

gridview的

<asp:GridView ID="ESBAndTSRValuesInputGridView" runat="server" ShowFooter="true" 
    AutoGenerateColumns="false"> 
    <Columns> 
     <asp:TemplateField HeaderText="Award Name"> 
      <ItemTemplate> 
       <asp:Label ID="lblAwardID" runat="server" Text='<%# Eval("AwardID") %>' Style="display: none;"></asp:Label> 
       <asp:Label ID="lblAwardName" runat="server" Text='<%# Eval("AwardName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="ESBValue"> 
      <ItemTemplate> 
       <asp:TextBox ID="ESBValue" Text='<%# Eval("ESBValue") %>' runat="server"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="TSRValue"> 
      <ItemTemplate> 
       <asp:TextBox ID="TSRValue" Text='<%# Eval("TSRValue") %>' runat="server"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

獲取值

for (int rowCount = 0; rowCount < ESBAndTSRValuesInputGridView.Rows.Count; rowCount++) 
     { 

      int cell0Val, cell1Val, cell2Val, cell3Val; 

      //input text is blank for all: 
      //TryParse returns false for all (because if I use Parse instead, exception occurs): 

      Int32.TryParse(((Label)ESBAndTSRValuesInputGridView.Rows[rowCount].FindControl("lblAwardID")).Text, out cell0Val); 
      Int32.TryParse(((Label)ESBAndTSRValuesInputGridView.Rows[rowCount].FindControl("lblAwardName")).Text, out cell1Val); 
      Int32.TryParse(((TextBox)ESBAndTSRValuesInputGridView.Rows[rowCount].FindControl("ESBValue")).Text, out cell2Val); 
      Int32.TryParse(((TextBox)ESBAndTSRValuesInputGridView.Rows[rowCount].FindControl("TSRValue")).Text, out cell3Val); 
      Int32.TryParse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[3].Text, out cell3Val); 

      int val1 = Int32.Parse(ESBAndTSRValuesInputGridView.Rows[rowCount].Cells[0].Text); 
      int val2 = Int32.Parse(dr["AWARDID"].ToString()); 

      if (val1 == val2) 
      { 
       rowIndex = rowCount; 
       break; 
      } 
     } 
+0

細胞0和1是用於綁定列,其具有不ID。那麼它如何爲這些工作? – Ahmad

+0

你必須找到控制來獲得從網格視圖的孩子的asp控制的值..你不能直接得到值..前兩個不是控制他們是綁定域 –

+0

那麼我怎麼得到BoundFields的值,然後,作爲那是我真正想要的? – Ahmad

相關問題