سؤال

Well since no one was able to determine why my DataTable could not get the updated GridView data, I'm now trying to directly get values from the GridView.

Problem now is that the text values I get from reading the GridViewRows are all empty strings.

Here is my 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>

Initializing GridView data from code-behind of a button click:

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

Trying to read the GridViewRow values:

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;
    }
}

So how can I get the actual text values when reading GridViewRows ?

I need the values of the BoundFields as well as the TextFields ..

And I'm using Visual Studio 2005 with .NET 2.0 Framework ..

هل كانت مفيدة؟

المحلول

replace your last cod block with this

you can not get directly value from textbox ..you have to find that control by 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>

get values

 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;
            }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top