yardımcı olacaktır deneyin, ancak bu düzeltme: RowDataBound durumunda
, basitçe aşağıdaki koşullu ekleyin Jason'ın, şartı işleyiciye ekleyen) benim için çalışmadı; Edit satırı hiç bir zaman veri toplantısı olmadı, böylece bu durum hiçbir zaman doğru olarak değerlendirilmedi. RowDataBound, GridView.EditIndex ile aynı RowIndex ile hiç çağrılmadı. Kurulumum biraz farklı olsa da, program aracılığıyla açılan menüde bir ObjectDataSource'a bağlanmayı tercih ediyorum. Ancak, olası değerler satırdaki diğer bilgilere bağlı olduğundan, açılan satırın yine de satır başına ayrı ayrı olması gerekir. Bu nedenle, ObjectDataSource bir SessionParameter değerine sahiptir ve bağlayıcı için gerektiğinde uygun oturum değişkenini ayarladığınızdan emin oluyorum.
<asp:ObjectDataSource ID="objInfo" runat="server" SelectMethod="GetData" TypeName="MyTypeName">
<SelectParameters>
<asp:SessionParameter Name="MyID" SessionField="MID" Type="Int32" />
</SelectParameters>
Ve ilgili satırda açılan: Benim düzenlemeyi oluşturmak silmek, güncelleme ve düğmeleri iptal etmek GridView bir CommandField kullanmıyordum yapıyor sona ne
<asp:TemplateField HeaderText="My Info" SortExpression="MyInfo">
<EditItemTemplate>
<asp:DropDownList ID="ddlEditMyInfo" runat="server" DataSourceID="objInfo" DataTextField="MyInfo" DataValueField="MyInfoID" SelectedValue='<%#Bind("ID") %>' />
</EditItemTemplate>
<ItemTemplate>
<span><%#Eval("MyInfo") %></span>
</ItemTemplate>
</asp:TemplateField>
; Bir TemplateField ile kendi başıma yaptım ve CommandNames'i uygun bir şekilde ayarlayarak GridView'da yerleşik düzenleme/silme/güncelleme/iptal eylemlerini tetikleyebildim. Edit (Düzenle) düğmesi için, CommandArgümanı, genel olarak olduğu gibi satırın PK'si yerine açılır menüyü bağlamak için gereken bilgileri yaptım. Bu şans, GridView'ın uygun satırı düzenlemesini engellemedi.
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="ibtnDelete" runat="server" ImageUrl="~/images/delete.gif" AlternateText="Delete" CommandArgument='<%#Eval("UniqueID") %>' CommandName="Delete" />
<asp:ImageButton ID="ibtnEdit" runat="server" ImageUrl="~/images/edit.gif" AlternateText="Edit" CommandArgument='<%#Eval("MyID") %>' CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton ID="ibtnUpdate" runat="server" ImageUrl="~/images/update.gif" AlternateText="Update" CommandArgument='<%#Eval("UniqueID") %>' CommandName="Update" />
<asp:ImageButton ID="ibtnCancel" runat="server" ImageUrl="~/images/cancel.gif" AlternateText="Cancel" CommandName="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
Ve rowcommand işleyicisinde
: satır düzenleme moduna ve böylece açılan databinds sunulmadan önce
void grdOverrides_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit")
Session["MID"] = Int32.Parse(e.CommandArgument.ToString());
}
rowcommand, tabii ki, olmuyor. Yani her şey çalışıyor. Bu biraz bir kesmek, ama düzenleme satırının niçin veri gönderip almadığını anlamaya çalışmak için yeterince zaman harcadım. Saurabh Tripathi için
Ben de gerek yok (e.Row.RowType == DataControlRowType.DataRow) düşünmek nasılsa düzenlenebilir başlık satırları kesmek yoksa. – quillbreaker
Hayır, çünkü üstbilgi satırı ile başlar ve aşağı çalışır. Bunu yapmazsanız bir hata alırsınız, ya da sadece çalışmıyor. – Jason
Veya satırın düzenleme modunda olduğunu kontrol edebilirsiniz, eğer 'e (e.RowState && DataControlRowState.Edit)> 0 {}' –