c# - 单击按钮时如何从 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>
<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;
解决方案
好的,有很多方法可以做到这一点。
第一:
触发的事件(由于 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")
推荐阅读
- c# - 使用 IdentityServer 使用身份提供者登录并通过 OpenID 验证用户
- handlebars.js - 使用数组替换硬编码 if else
- cordova - Window.open 不适用于 android 设备,但适用于浏览器
- excel - 为什么我不能让 Internet Explorer 使用此 VBA 代码?
- ajax - Laravel `Auth` 与 3rd 方库 ajax 调用不兼容?
- discord.js - 如何获得在 Discord 公会配置中选择的“欢迎频道”?
- python - 如何在一个数据帧上使用 between_time,为时间变量引用第二个数据帧
- python - 是否有 C 等价于 Python: if __name__ == '__main__': to write main() 在文件的顶部?
- cordova - 无法运行浏览器平台。错误:url.URL 不是构造函数
- python - BlockingIOError: [Errno 35] 资源暂时不可用