我已經嘗試了幾個所謂的答案,這讓我失去了。我只是試圖默認TextBox
文本值與今天的日期和時間,但我找不到控制,當我點擊LinkButton
CommandName「編輯」。如何在GridViewRow編輯模式下找到TextBox
這裏是我的gridview的...
<asp:GridView ID="gvSignInRegister" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3"
DataSourceID="sdsSignInRegister" ForeColor="Black" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" GridLines="Vertical" OnRowCommand="gvSignInRegister_RowCommand1">
<Columns>
<asp:TemplateField HeaderText="Returned" SortExpression="DateTimeReturned">
<EditItemTemplate>
<asp:TextBox ID="txtReturned" runat="server"></asp:TextBox>
<asp:ImageButton runat="Server" ID="calImg" ImageUrl="~/images/Calendar_scheduleHS.png" AlternateText="Click to show calendar" CausesValidation="False" />
<asp:RequiredFieldValidator ID="rfv1" runat="server" SetFocusOnError="true" ValidationGroup="vg1" ControlToValidate="txtReturned" ErrorMessage="Required"></asp:RequiredFieldValidator>
<ajaxToolkit:CalendarExtender ID="ce1" runat="server" PopupButtonID="calImg" Enabled="true" Format="dd/MM/yyyy" TargetControlID="txtReturned" PopupPosition="TopRight" OnClientDateSelectionChanged="AppendTime"></ajaxToolkit:CalendarExtender>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label9" runat="server" Text='<%# Eval("DateTimeReturned","{0:dd/MM/yyyy HH:mm}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:Button ID="btnCAN" runat="server" CausesValidation="false" CommandName="Cancel" Text="CANCEL" />
<asp:Button ID="btnUPD" runat="server" ValidationGroup="vg1" CausesValidation="true" CommandName="Update" Text="UPDATE" />
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="btnEDT" runat="server" CausesValidation="false" CommandName="Edit" CommandArgument='<%# Container.DataItemIndex %>' Text="SIGN IN" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCCCC" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>
LinkButton的btnEDT工作,並把GridView的編輯模式。但在後面的代碼中,我找不到「txtReturned」。
這是我到目前爲止已經試過......
protected void gvSignInRegister_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit")
{
int rowIdx = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gvSignInRegister.Rows[rowIdx];
if (row != null && row.RowType == DataControlRowType.DataRow)
{
TextBox tb = (TextBox)row.FindControl("txtReturned");
if (tb != null) tb.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
//I've tried this too but it does not work. Interestingly, it does not crash, so cells[4] must exist!
//row.Cells[4].Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
}
}
}
出於某種原因,rowIdx始終爲0,爲什麼?我認爲0的行索引意味着gridview控件的標題。
我也嘗試過使用其他人在其他帖子中提出的NamingContainer,但是返回一個空白(我懷疑是新的?)GridViewRow。
即
GridViewRow行=(GridViewRow)((GridViewRow)(e.CommandSource).NamingContainer);
UPDATE
我發現this,而這正是我所遇到的問題,而是通過RowEditing解決方案仍然找不到文本框!
但是RowDataBound()解決了它!閱讀下面的答案。
謝謝,但直到用戶提供了一個有效的日期/時間,我想在它之前默認爲今天的日期和時間反正我沒有啓動起來的GV更新他們點擊SUBMIT觸發RowUpdating。我剛剛嘗試使用RowEditing,因爲它處於編輯模式,是的,你是對的。我仍然無法找到文本框。這是爲什麼?你不能在gridview的編輯模式下找到控件嗎? – Fandango68
是的,只有在editmode處於活動狀態後,EditItemTemplate中的控件纔可用。所以你不能在划船活動上得到它。這就是爲什麼我給了文本框控件的約束力。這會給你一個佔位符,以便在加載電網本身時取消當前日期。你可以在rowUpdating事件中執行validatin,如果validatin失敗,則返回false。 –
但正如我所說,RowUpdating也沒有工作。 – Fandango68