单元格文本始终:

时间:2018-07-25 03:57:03

标签: c# html asp.net web-applications

每当我从gridview中选择一行时,我都希望在文本框中显示特定单元格的文本,但是每当我执行此操作时,即使单元格不为空,“&nbsp”也是唯一的文本。 gridview上的数据是从数据库绑定的,我做了一个函数,数据库中的所有数据都将绑定到我的gridview上。下面是我正在使用的代码。

textbox1.Text = myGridView.SelectedRow.Cells[3].Text;

标记

<asp:GridView ID="TraineeGrid" runat="server" AutoGenerateSelectButton ="true" AllowSorting="True" ShowHeader="true"
                        ShowFooter="false" AutoGenerateColumns="False" AutoGenerateEditButton="false" ScrollBars="Auto"
                         OnRowEditing="TraineeGrid_RowEditing" 
                        OnRowUpdating="TraineeGrid_RowUpdating"  OnRowCancelingEdit="TraineeGrid_RowCancelingEdit"
                          DataKeyNames="ID" Width="100%" 
                        CellPadding="4" ForeColor="#333333" GridLines="None" HorizontalAlign="Center"
                         EditRowStyle-VerticalAlign="Middle" OnInit="Page_Load" OnRowDataBound="TraineeGrid_RowDataBound"  OnSelectedIndexChanging="TraineeGrid_SelectedIndexChanging" OnSelectedIndexChanged="TraineeGrid_SelectedIndexChanged">

                        <AlternatingRowStyle BackColor="White" />

                        <Columns>     
   <asp:TemplateField HeaderText="Delegates Name">

                                <ItemStyle HorizontalAlign="Center" Width="125px" />

                                <HeaderTemplate>
                                    <asp:LinkButton ID="lbDelegate" runat="server" Text="Delegate Name" CommandName="Sort"
                                   CommandArgument="Delegate" ForeColor="White" Font-Underline="False"></asp:LinkButton>

                                    <br />

                                    <asp:TextBox ID="newDelegate" TabIndex="1" runat="server"></asp:TextBox>                           
                                </HeaderTemplate>

                                <ItemTemplate>
                                    <%# Eval("Delegate") %>
                                </ItemTemplate>

                                    <EditItemTemplate>
                                        <asp:TextBox ID="txtDelegate" runat="server" 
                                                    Text='<%# Eval("Delegate") %>'/>
                                    </EditItemTemplate>

                            </asp:TemplateField>

                            <asp:TemplateField HeaderText="Rank/Position">
                                <ItemStyle HorizontalAlign="Center" Width="125px" />

                                <HeaderTemplate>
                                    <asp:LinkButton ID="lbRankPos" runat="server" Text="Rank/Position" CommandName="Sort"
                                   CommandArgument="RankPos" ForeColor="White" Font-Underline="False"></asp:LinkButton>

                                    <br />

                                    <asp:TextBox ID="newRankPos" TabIndex="2" runat="server"></asp:TextBox>
                                </HeaderTemplate>

                                <ItemTemplate>
                                   <%# Eval("RankPos") %>
                                </ItemTemplate>

                                    <EditItemTemplate>
                                        <asp:TextBox ID="txtRankPos" runat="server" 
                                                    Text='<%# Eval("RankPos") %>'/>
                                    </EditItemTemplate>

                            </asp:TemplateField>
                        </Columns>

绑定数据的功能

private void PopulateData()
{
    DataTable dataTable = new DataTable();
    using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["TestCS"].ConnectionString))
    {
        string path = "PopulateSQL.txt";
        StringBuilder sb = new StringBuilder();
        using (StreamReader sr = new StreamReader(path))
        {
            while (sr.Peek() >= 0)
            {
                sb.Append(sr.ReadLine());
            }
            string sql = sb.ToString();
          using (SqlCommand cmd = new SqlCommand(sql, connection))
           {
              using (SqlDataAdapter dataAdapt = new SqlDataAdapter(cmd))
             {
                dataAdapt.Fill(dataTable);
                ViewState["NormalGrid"] = dataTable;
             }
           }
        }
    }
    if (dataTable.Rows.Count > 0)
    {
        TraineeGrid.DataSource = dataTable;
        TraineeGrid.DataBind();
    }
    else
    {
        //Displays 'No Data Found' to gridview if there are no data in table
        dataTable.Rows.Add(dataTable.NewRow());
        TraineeGrid.DataSource = dataTable;
        TraineeGrid.DataBind();
        TraineeGrid.Rows[0].Cells.Clear();
        TraineeGrid.Rows[0].Cells.Add(new TableCell());
        TraineeGrid.Rows[0].Cells[0].ColumnSpan = dataTable.Columns.Count;
        TraineeGrid.Rows[0].Cells[0].Text = "No Data Found";
        TraineeGrid.Rows[0].Cells[0].HorizontalAlign = HorizontalAlign.Center;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用以下命令:textbox1.Text = Server.HtmlDecode(row.Cells[1].Text.Trim());

OnSelectedIndexChanged中:

protected void OnSelectedIndexChanged1(object sender, EventArgs e)
{
    //Get the selected row
    GridViewRow row = GridView1.SelectedRow;
    if (row != null)
    {
        // With 
        // TextBox1.Text = (row.FindControl("lblLocalTime") as Label).Text;
        // Without
        TextBox1.Text = Server.HtmlDecode(row.Cells[1].Text.Trim());
    }
}

完整标记:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
OnSelectedIndexChanged="OnSelectedIndexChanged1" AutoGenerateSelectButton="true">
<Columns>
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
    <asp:BoundField DataField="City" HeaderText="City" ItemStyle-Width="150" />
</Columns>

答案 1 :(得分:0)

我已经找到了解决方案。问题是我使用TemplateField而不是BoundField,这就是为什么我不能使用.Cells []来获取想要获取的特定单元格的原因。但是,如果使用的是TemplateField,则可以使用.FindControl()并放置发生数据绑定的标签的ID(例如Text ='<%#Eval(“ FirstName”)%>')。您可以看到我在ItemTemplate上贴了标签来调用它的ID。

标记

 <asp:TemplateField HeaderText="Delegates Name">

             <ItemStyle HorizontalAlign="Center" Width="125px" />

                     <HeaderTemplate>
           <asp:LinkButton ID="lbDelegate" runat="server" Text="Delegate Name" CommandName="Sort"
          CommandArgument="Delegate" ForeColor="White" Font-Underline="False"></asp:LinkButton>

                                    <br />

               <asp:TextBox ID="newDelegate" TabIndex="1" runat="server"></asp:TextBox>                           
                                </HeaderTemplate>

                                <ItemTemplate>
            <asp:Label ID="lbName" runat="server" Text = '<%# Eval("Delegate") %>'> </asp:Label> 
                                </ItemTemplate>

                                    <EditItemTemplate>
                  <asp:TextBox ID="txtDelegate" runat="server" 
                                                    Text='<%# Eval("Delegate") %>' />
                                    </EditItemTemplate>

                            </asp:TemplateField>

隐藏代码

Label varName = (Label)rows.FindControl("lbName");
        string name = varName.Text;