我的GridView
正在從綁定到它的select語句中獲取其數據。在GridView行中動態設置只讀文本框的簡單方法?
我想使所有列/行爲只讀/不可選,直到用戶單擊Edit
按鈕。
我Edit
按鈕勢必GridView1_RowEditing
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
TextBox txtBoxResTitle = (TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("txtBoxResTitle");
txtBoxResTitle.ReadOnly = false;
txtBoxResTitle.Enabled = true;
BindData();
}
在我使用類EditIndex
的GridView
讓剛由NewEditIndex
設定的行的索引上面的代碼片段。在上面的代碼中,我還嘗試設置e.NewEditIndex
以獲取該行以查找TextBox,但後面的代碼似乎仍不適用。
本質上,當我單擊編輯時,我希望選定行中的文本框進行編輯,以便編輯,並且當我單擊Update
或Cancel
時,我打算讓該行變爲不可編輯。
上面的代碼不會在這兩種情況下發揮作用(我是否使用GridView1.EditIndex or e.NewEditIndex
)
下面是爲GridView我的網頁代碼。
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView runat="server" AutoGenerateColumns="false" ID="GridView1" AllowPaging="true"
... styling snipped ...
OnRowEditing="GridView1_RowEditing"
OnRowUpdating="GridView1_RowUpdating"
OnPageIndexChanging="GridView1_PageIndexChanging"
OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowDeleting="GridView1_RowDeleting">
... styling snipped ...
<Columns>
<asp:TemplateField HeaderText="pk1" Visible="false">
<ItemTemplate>
<asp:Label ID="lblResPk1" runat="server" visible="false" Text='<%#Eval ("pk1")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Resource Title">
<ItemTemplate>
<asp:TextBox ID="txtBoxResTitle" readonly="true" Enabled="false" runat="server" Text='<%#Eval ("resource_title")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Resource Type">
<ItemTemplate>
<asp:TextBox ID="txtBoxResType" runat="server" Text='<%#Eval ("resource_type")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Cost">
<ItemTemplate>
<asp:TextBox ID="txtBoxResCost" runat="server" Text='<%#Eval ("resource_cost")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Availability">
<ItemTemplate>
<asp:TextBox ID="txtBoxResAvail" runat="server" Text='<%#Eval ("available")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Edit" ShowHeader="false">
<EditItemTemplate>
<asp:LinkButton ID="lnkbtnUpdate" runat="server" CausesValidation="true" Text="Update" CommandName="Update"></asp:LinkButton>
<asp:LinkButton ID="lnkbtnCancel" runat="server" CausesValidation="false" Text="Cancel" CommandName="Cancel"></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="btnEdit" runat="server" CausesValidation="false" CommandName="Edit" Text="Edit"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="Delete" ShowDeleteButton="true" ShowHeader="true" />
<asp:CommandField HeaderText="Select" ShowSelectButton="true" ShowHeader="true" />
</Columns>
</asp:GridView>
<asp:Label ID="lblDeleteException" runat="server" Text="Label" Font-Bold="True" ForeColor="#FF3300" Visible="False"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
請指教。
底部jQuery代碼
$(function() {
$('#GridView1').find('[input type="text"]').each(function() {
$(this).attr('disabled', 'disabled');
}) <-------extra) needed
});
被扔關於預期的錯誤),我相信它需要一個以上的地方譜寫。
我說我的更新面板的結束標記中的代碼右側像這樣:
</asp:UpdatePanel>
<script>
$(function() {
$('#GridView1').find('[input type="text"]').each(function() {
$(this).attr('disabled', 'disabled');
})
});
</script>
</asp:Content>
不過還是字段可編輯。我的Site.Master文件包含加載jquery文件的腳本引用,因爲我在我的項目的其他地方使用jQuery。
在我的HTML我需要添加OnRowCreated =「GridView1_RowCreated」對不對?如何循環瀏覽每個Ctrl以提高效率/頁面加載時間?看起來好像它不是最佳的。 –
這初步不適合我。是否因爲我使用SqlDataAdapter將數據綁定到gridview? onRowCreated事件正在觸發,但當它到達「if(ctrl是TextBox)」時,它不接受該條件爲真。 –
如果您調用GridView1.DataSource =「您的數據源」,然後調用GridView1.DataBind(),則此事件正在觸發。什麼是不正確的工作。你可以使用JQuery嗎? – thewisegod