Asp.net 为什么在读取GridViewRow文本值时会得到空字符串?

Asp.net 为什么在读取GridViewRow文本值时会得到空字符串?,asp.net,.net,gridview,datatable,.net-2.0,Asp.net,.net,Gridview,Datatable,.net 2.0,由于没有人能够确定原因,我现在尝试直接从GridView获取值 现在的问题是,我从读取GridViewRows得到的文本值都是空字符串 这是我的代码: ASPX Markup code for the GridView: <asp:gridview ID="ESBAndTSRValuesInputGridView" runat="server" ShowFooter="true" AutoGenerateColumns="false"> <Columns>

由于没有人能够确定原因,我现在尝试直接从GridView获取值

现在的问题是,我从读取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>
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();
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;
    }
}
尝试读取GridViewRow值:

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>
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();
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;
    }
}
for(int rowCount=0;rowCount
那么,在读取GridViewRows时,如何获得实际的文本值呢

我需要BoundFields和TextFields的值


我正在将Visual Studio 2005与.NET 2.0 Framework一起使用。

用这个替换上一个cod块

您无法直接从textbox获取值。您必须通过id找到该控件

网格视图

<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;
            }
        }
for(int rowCount=0;rowCount
单元格0和1用于没有ID的BoundFields。那么如何处理这些字段呢?您必须找到控件才能从asp控件(网格视图的子控件)获取值。您无法直接获取值。前两个不是控件,它们是BoundField,那么我如何获取BoundFields的值呢,因为这正是我真正想要的?您忘了提及您创建的两个标签的
runat=“server”
语句。。但除此之外,它工作得很好!:)。。我建议您也为这两个标签添加
runat=“server”
,以防其他人提供此答案,而您目前编写的答案对他们不起作用。。