首页 > 解决方案 > 单击按钮时如何从 GridView 获取 DateTime 并将其添加到 TextBox

问题描述

我想从我的 GridView 中显示的两个日期字段中获取值,并通过单击按钮将它们输入到面板中下面显示的 TextBox 中。我似乎无法通过使用 rowindex 和相应的单元格来获取日期值。

这是我的 GridView

<asp:GridView ID="ClientContracts" runat="server" CssClass="table table-hover table-sm" ItemType="ScheduleStarterKit.ViewModels.ContractInfo" 
            DataKeyNames="ContractId"
            AutoGenerateColumns="false"
            OnRowCommand="ClientContracts_RowCommand">
            <Columns>
                <asp:ButtonField CommandName="Select" Text="Edit" ControlStyle-CssClass="btn btn-secondary btn-xs" />
                <asp:BoundField DataField="Title" HeaderText="Title" />
                <asp:TemplateField HeaderText="From">
                    <ItemTemplate><%# Item.Duration.From.ToLongDateString() %></ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="To">
                    <ItemTemplate><%# Item.Duration.To.ToLongDateString() %></ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

我想要单元格 2 和 3 中的 DateTime 并将其输入到下面的相应文本框中

<asp:Panel ID="AddEditPanel" runat="server" Visible="false">
            <hr />
            <asp:Label ID="Label1" runat="server" AssociatedControlID="ContractTitle">Contract Title</asp:Label>
            <asp:TextBox ID="ContractTitle" runat="server" CssClass="form-control" />
            <asp:Label ID="Label2" runat="server" AssociatedControlID="Requirements">Requirements</asp:Label>
            <asp:TextBox ID="Requirements" runat="server" CssClass="form-control" TextMode="MultiLine" Rows="3" />
            <asp:Label ID="Label3" runat="server" AssociatedControlID="FromDate">Duration</asp:Label>
            <div class="form-inline">
                <div class="form-group row">
                    <div class="input-group">
                        <div class="input-group-prepend">
                            <span class="input-group-text">From</span>
                        </div>
                        <asp:TextBox ID="FromDate" runat="server" CssClass="form-control" TextMode="Date" />
                        <div class="input-group-append">
                            <div class="input-group-prepend">
                                <span class="input-group-text">To</span>
                            </div>
                            <asp:TextBox ID="ToDate" runat="server" CssClass="form-control" TextMode="Date" />
                        </div>
                    </div>
                    &nbsp;&nbsp;
                    <asp:LinkButton ID="SaveContract" runat="server" CssClass="btn btn-primary" OnClick="SaveContract_Click">Save</asp:LinkButton>
                </div>
            </div>
        </asp:Panel>

这是我背后的代码

int rowIndex = Convert.ToInt32(e.CommandArgument);
            ContractTitle.Text = ClientContracts.Rows[rowIndex].Cells[1].Text;
            FromDate.Text = ClientContracts.Rows[rowIndex].Cells[2].Text;
            ToDate.Text = ClientContracts.Rows[rowIndex].Cells[3].Text;

标签: c#asp.net

解决方案


好的,有很多方法可以做到这一点。

第一:

触发的事件(由于 CommandName="Select" - 非常重要 - 如果您没有此事件,将不会触发更改的行索引)。

所以,在事件 GridView SelectedIndexChanged

您可以在 EVENT 所选索引更改时执行此操作:

  GridViewRow gV = ClientContracts.SelectedRow;
  FromDate.Text = gV.Cells[2].Text;
  ToDate.Text =   gV.Cells[3].Text;      

但是,您的日期字段现在是文本,您可能希望将其保留为日期值类型。

您也可以代替 buttonField,放入一个实际的 asp 按钮。像这样说:

                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="btnSelect" runat="server" Text="Select"
                            CommandName="Select"
                            MyStartDate = '<%# Items.Duration.From %>'
                            MyEndDate = '<%# Items.Duration.From %>' />
                    </ItemTemplate>
                </asp:TemplateField>

请注意我们如何简单地添加一些自定义标签。

现在,在行中选择的索引改变了吗?

我们去:

    Dim gV As GridViewRow = GridView1.SelectedRow

    Dim MyButton As Button = gV.FindControl("btnSelect")

    ' startdate = MyButton.Attributes("MyStartDate")

推荐阅读