在GridView中未显示文本框

3
我正在手动创建一个数据表,并将其应用于网格视图,但文本框列没有显示出来。其他列可以正常工作,但我需要创建一个带有可输入文本框的列。
祝好, Chris
protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    int numPrizes = GetNumPrizes();//if there are voided prizes.

                    DataTable dt = new DataTable();
                    gvTournamentData.Columns.Clear();

                    //PrizeNumber
                    //Add the columns to the grid view
                    BoundField PrizeNumberBF = new BoundField();
                    PrizeNumberBF.DataField = "PrizeNumber";
                    PrizeNumberBF.SortExpression = "PrizeNumber";
                    PrizeNumberBF.HeaderText = "";
                    gvTournamentData.Columns.Add(PrizeNumberBF);
                    dt.Columns.Add("PrizeNumber");

                    //Place
                    //Add the columns to the grid view
                    BoundField PlaceBF = new BoundField();
                    PlaceBF.DataField = "Place";
                    PlaceBF.SortExpression = "Place";
                    PlaceBF.HeaderText = "Place";
                    gvTournamentData.Columns.Add(PlaceBF);
                    dt.Columns.Add("Place", typeof(String));
                    DataTable dtPlaces = GetPlaces(1043); //hard coded for now

                    ////PrizeName //BFOP Prize
                    //Add the columns to the grid view
                    BoundField PrizeNameBF = new BoundField();
                    PrizeNameBF.DataField = "BFOP Prize";
                    PrizeNameBF.SortExpression = "BFOP Prize";
                    PrizeNameBF.HeaderText = "BFOP Prize";
                    gvTournamentData.Columns.Add(PrizeNameBF);
                    dt.Columns.Add("BFOP Prize", typeof(String));
                    DataTable dtPrizeNames = GetPrizeNames(1043); //hard coded for now

                    ////NickName
                    dt.Columns.Add("NickName", typeof(TextBox));

                    numPrizes = 7; //hard coded for now
                    for (int index = 1; index <= numPrizes; index++)
                    {
                        // Start at Prize one instead of Prize zero
                        string ID = index.ToString();
                        DataRow row = dt.NewRow();
                        row["PrizeNumber"] = ID + ")";
                        row["Place"] = dtPlaces.Rows[index - 1]["Place"];
                        row["BFOP Prize"] = dtPrizeNames.Rows[index - 1]["PrizeName"];
                        //TextBox nicknameTB = new TextBox();
                        //nicknameTB.Text = ID + ")";
                        //row["NickName"] = nicknameTB;
                        /* for (int x = 0; x < numCols; x++)
                         {
                             PopulatePrizeNameLabel(ID);
                             PopulateAddButton(ID);
                         }*/
                        dt.Rows.Add(row);
                    }

                    gvTournamentData.DataSource = dt;
                    gvTournamentData.DataBind();
                    gvTournamentData.Visible = true;
                }
    }
1个回答

2

为什么不在表单页面中使用TemplateColumn

示例:

<asp:GridView>
<Columns>
  <asp:TemplateColumn HeaderText="Place">
     <ItemTemplate>
       <%#Eval("Place")%>
     </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="NickName">
      <ItemTemplate>         
         <asp:TextBox ID="txt_NickName" runat="server" Width="85px"                 Text='<%#Eval("NickName")%>'>
                                    </asp:TextBox>
                    </ItemTemplate>
      </ItemTemplate>
   </asp:TemplateColumn>
</Columns>
</asp:GridView>

当您布置模板时,您希望绑定到的模板。上述方法更加灵活。

因此,当您将数据绑定到网格视图时:

gvTournamentData.DataSource = dt;
gvTournamentData.DataBind();

然后它将把所有这些字段呈现到一个模板中。

使用此链接作为参考:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview%28v=vs.110%29.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接