0

グリッドビューを含むタブ コントロールがあります。フッター行を使用して新しいレコードを追加したいのですが、レコードを保存しようとすると、テキスト ボックスに値が見つかりません。clientidmode = static を設定しました。また、再帰的な findcontrol を使用してみましたが、役に立ちませんでした。誰か助けてくださいありがとう

<asp:UpdatePanel ID="pnl" runat="server" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:TabContainer ID="TabDetails" runat="server" AutoPostBack="true" OnActiveTabChanged="TabDetails_ActiveTabChanged"
                ActiveTabIndex="1">
                <asp:TabPanel runat="server" ID="TabNotes" HeaderText="Notes" CssClass="tabinactive">
                    <ContentTemplate>
                        <asp:GridView ID="GrdNotes" ClientIDMode="Static" runat="server" AutoGenerateColumns="false"
                            Width="99%" OnRowEditing="GrdNotes_RowEditing" OnRowCancelingEdit="GrdNotes_RowCancelingEdit"
                            OnRowUpdating="GrdNotes_RowUpdating" OnRowDeleting="GrdNotes_RowDeleting" OnRowCreated="GrdNotes_RowCreated"
                            ShowFooter="false">
                            <Columns>
                                <asp:TemplateField HeaderText="Notes">
                                    <ItemTemplate>
                                        <asp:HiddenField ID="hfNotesID" runat="server" Value='<%# Bind("Notes_ID")%>' />
                                        <asp:Label ID="LblNotes" runat="server" Text='<%# Bind("Notes")%>'></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TxtNotes" runat="server" Text='<%# Bind("Notes")%>'></asp:TextBox>
                                    </EditItemTemplate>
                                    <FooterTemplate>
                                        <asp:TextBox ID="TxtNewNotes" ClientIDMode="Static" runat="server" Width="300px"></asp:TextBox>
                                    </FooterTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="Notes_Date" ReadOnly="True" DataFormatString="{0:dd/MM/yyyy}"
                                    HeaderText="Date" />
                                <asp:BoundField DataField="FullName" ReadOnly="True" HeaderText="Entered By" />
                            </Columns>
                        </asp:GridView>
                        <br />
                        <asp:Button ID="btnAdd" runat="server" Text="Add Notes" OnClick="btnAddVisitNotes_Click" />
                    </ContentTemplate>
                </asp:TabPanel>
            </asp:TabContainer>
        </ContentTemplate>
    </asp:UpdatePanel>


 private void BindNotes(int id)
        {
            var qry = from vn in dc.sp_list_notes(id)
                      orderby vn.Notes_Date descending
                      select vn;

            GrdNotes.DataSource = qry.ToList();
            GrdNotes.DataBind();
        }

        protected void GrdNotes_RowCreated(Object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                var lnk = new LinkButton();
                lnk.Text = "Save";
                lnk.ID = "btnAddNotesSave";
                lnk.CausesValidation = false;
                lnk.Command += new CommandEventHandler(btnAddNotesSave_Click);
                lnk.CssClass = "norm";

                e.Row.Cells[1].Controls.Add(lnk);

                var lbl = new Label();
                lbl.Text = "XX";
                lbl.ID = "LblSpace";
                lbl.CssClass = "norm_w";
                e.Row.Cells[1].Controls.Add(lbl);

                var lnk1 = new LinkButton();

                lnk1.Text = "Cancel";
                lnk1.ID = "btnAddNotesCancel";
                lnk1.CausesValidation = false;
                lnk1.Command += new CommandEventHandler(btnAddNotesCancel_Click);
                lnk1.CssClass = "norm";

                e.Row.Cells[1].Controls.Add(lnk1);

            }
 protected void btnAddNotes_Click(object sender, EventArgs e)
        {
            GrdNotes.ShowFooter = true;
            BindNotes(int.Parse(hfID.Value));
        }
  protected void btnAddNotesSave_Click(object sender, EventArgs e)
        {

            TextBox txt = (TextBox)GrdNotes.FooterRow.FindControl("TxtNewNotes") ;

            string sNotes = txt.Text;
        }
4

1 に答える 1

1

TextBox「テキストボックスに値が見つかりません」とは、ビアを見つけることはできますが、そのプロパティは ? を返すことを意味FindControlしますTextString.Empty

テキストボックスには確かにテキストがありますが、「」が返されます。チェックtxt.idを実行すると、「TxtNewNotes」が返されますが、txt.text = ""

電話を!IsPostBackかける前にチェックを追加するのを忘れた可能性があります。BindNotesPage_Load

ありがとう、はい、私はそれを忘れたなんて信じられない!

最も経験豊富な ASP.NET 開発者でさえ、これを忘れることがあります ;)

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
        BindNotes();
}
于 2013-11-08T23:07:00.563 に答える