2008-10-05 13 views
7

İşte zamanında bağlı olduğu bir GRIDVIEW benim kod:EditItemTemplate Alanı'nda bir GridView'da bir DropDownList nasıl bağlanır?

... 
<asp:templatefield> 
    <edititemtemplate> 
     <asp:dropdownlist runat="server" id="ddgvOpp" /> 
    </edititemtemplate> 
    <itemtemplate> 
     <%# Eval("opponent.name") %> 
    </itemtemplate> 
</asp:templatefield> 
... 

Ben DropDownList "ddgvOpp" bağlamak istiyorum ama nasıl bilmiyorum. Yapmalıyım ama yapmam. İşte ne var, ama ben yapan "nesne başvurusu" hatası, almaya devam duygusu: DropDownList doldurulur alır nerede BindOpponentDD() adildir

protected void gvResults_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) //skip header row 
    { 
     DropDownList ddOpp = (DropDownList)e.Row.Cells[5].FindControl("ddgvOpp"); 
     BindOpponentDD(ddOpp); 
    } 
} 

. Bunu doğru olayda yapmıyorum mu? Eğer değilse, bunu hangi koda yerleştirmem gerekiyor?

cevap

5

Tamam şimdiden çok

Teşekkür ... ben sadece aptal değilim sanırım. Bunu anladım. (

if (myGridView.EditIndex == e.Row.RowIndex) 
{ 
    //do work 
} 
+0

Ben de gerek yok (e.Row.RowType == DataControlRowType.DataRow) düşünmek nasılsa düzenlenebilir başlık satırları kesmek yoksa. – quillbreaker

+0

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

+0

Veya satırın düzenleme modunda olduğunu kontrol edebilirsiniz, eğer 'e (e.RowState && DataControlRowState.Edit)> 0 {}' –

1
protected void grdDevelopment_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (grdDevelopment.EditIndex == e.Row.RowIndex && e.Row.RowType==DataControlRowType.DataRow) 
    {  
     DropDownList drpBuildServers = (DropDownList)e.Row.Cells[0].FindControl("ddlBuildServers"); 
    } 
} 

bu bir

Bu benim aynı sorunu vardı u

1

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

2

sayesinde

sen benim için çalıştı İşletmesi çözüm. gridView_RowDataBound() olayında kullanım.

if(gridView.EditIndex == e.Row.RowIndex && e.Row.RowType == DataControlRowType.DataRow) 
{ 
    // FindControl 
    // And populate it 
} 

Aynı sorunla uğraşan biri varsa, bunu deneyin.

Şerefe.

0

Bu kod istediğini yapmak olacak:

<asp:TemplateField HeaderText="garantia" SortExpression="garantia"> 
<EditItemTemplate> 
    <asp:DropDownList ID="ddgvOpp" runat="server" SelectedValue='<%# Bind("opponent.name") %>'> 
     <asp:ListItem Text="Si" Value="True"></asp:ListItem> 
     <asp:ListItem Text="No" Value="False"></asp:ListItem> 
    </asp:DropDownList> 
</EditItemTemplate> 
<ItemTemplate> 
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("opponent.name") %>'></asp:Label> 
</ItemTemplate> 
İlgili konular