2013-07-01 5 views
0

Eh bien, puisque personne n'a été en mesure de déterminer pourquoi my DataTable could not get the updated GridView data, j'essaie maintenant d'obtenir directement des valeurs de GridView.Pourquoi des chaînes vides s'affichent-elles lors de la lecture des valeurs de texte GridViewRow?

Le problème est maintenant que les valeurs de texte que je reçois à la lecture de GridViewRows sont toutes des chaînes vides.

Voici mon code:

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> 

Initialiser données GridView à partir du code-behind d'un bouton clic:

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(); 

Essayer de lire les valeurs de 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; 
    } 
} 

Alors, comment puis-je obtenir les valeurs de texte réelles lors de la lecture de GridViewRows?

J'ai besoin des valeurs des BoundFields ainsi que les TextFields ..

Et j'utilise Visual Studio 2005 avec .NET Framework 2.0 ..

Répondre

2

remplacer votre dernier bloc de morue avec ce

vous ne pouvez pas obtenir directement la valeur de ..vous doivent textbox trouver que le contrôle par 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> 

valeurs get

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

cellules 0 et 1 sont pour la BoundFields qui n'ont pas ID. Alors, comment cela peut-il fonctionner pour ceux-là? – Ahmad

+0

vous devez trouver le contrôle pour obtenir des valeurs de contrôle d'asp qui sont enfants de la vue de la grille ..vous ne pouvez pas obtenir de valeur directement..premièrement deux ne sont pas de contrôle, ils sont boundfield –

+0

Alors, comment puis-je obtenir la valeur de BoundFields c'est ce que je veux vraiment? – Ahmad

Questions connexes