2010-08-13 12 views
8

में DropDownList के चयनित वैल्यू को कैसे सेट करें, मैं पहले पूछे गए this करने की कोशिश कर रहा हूं। मुझे मिला एकमात्र अंतर अतिरिक्त सूची आइटम है जो उपरोक्त कोड में शामिल था।GridView EditTemplate

मैंने AppendDataBoundItems=true का उपयोग करने की कोशिश की लेकिन यह अभी भी काम नहीं कर रहा है। मैं भी अपना डिफ़ॉल्ट मान उस मान पर सेट करना चाहता हूं जो itemtemplate i.e. DropDownList's SelectedValue='<%# Eval("DepartmentName") %>' के लेबल में प्रदर्शित किया जा रहा था लेकिन ड्रॉपडाउन सूची में थीई संपत्ति मेरे लिए उपलब्ध नहीं है। कारण क्या हो सकता है। ??

<EditItemTemplate> 
    <asp:DropDownList ID="ddlDepartment_Edit" runat="server" 
     DataSourceID="dsDepartment_Edit" DataTextField="DepartmentName" 
     DataValueField="PK_DepartmentId"> 
    </asp:DropDownList> 
    <asp:SqlDataSource ID="dsDepartment_Edit" runat="server" 
     ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>" 
     ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" 
     SelectCommandType="StoredProcedure"> 
    </asp:SqlDataSource>         
</EditItemTemplate> 
<ItemTemplate> 
    <asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>' > 
    </asp:Label> 
</ItemTemplate> 

मैं उपयोग कर रहा हूँ GridView

उत्तर

8

DataValueField गलत हो रहा है - यह DepartmentId नहीं होना चाहिए? इसी तरह, आपको SelectedValue='<%# Eval("**DepartmentId**") %>' - DepartmentNameSeletectText होना चाहिए।

+2

यह वह जगह है जहां मैं परेशानी में हूं। ऐसी कोई संपत्ति मेरे लिए दृश्यमान नहीं हो रही है यानी चयनित वैल्यू या चयनित टेक्स्ट, ताकि मैं उन्हें कुछ मूल्य असाइन कर सकूं। DataValueField के बारे में, हाँ आप सही हैं यह प्राथमिक कुंजी होना चाहिए। लेकिन चर्चा के एक हिस्से तक नहीं जब तक कि इन दो गुणों को मेरे लिए उपलब्ध न हो जाए। –

+2

वीएस डिज़ाइनर आपको इंटेलि-एन्टीनेस में संपत्ति नहीं दिखा रहा है लेकिन वहां है। दो गुण हैं - चयनित वैल्यू और चयनित इंडेक्स। यदि आप चयनित इंडेक्स = '<% # Eval (' DepartmentId ')%>' लिखते हैं तो क्या होता है? – VinayC

+0

मेरी गलती - यह चयनित वैल्यू = '<% # इवल (' विभाग आईडी ')%>' के रूप में होना चाहिए था। – VinayC

0

आपके ग्रिड पर ItemCommand नामक एक ईवेंट है। इसके लिए एक विधि बनाएं:

protected void Grid1_ItemCommand(object source, GridCommandEventArgs e) 

अब बस एक मामले बयान है जो उपयोगकर्ता द्वारा ग्रिड पर संपादित करें बटन क्लिक किया गया है पहचान लेंगे बनाएँ:

case Grid.EditCommandName:  
//set a member variable to the string of the cell you are editing. 
//something like: mString = e.item..["Column"].toString();     
        break; 

अब आप एक सदस्य चर के लिए निर्धारित किया स्ट्रिंग जिसे आप ड्रॉपडाउन से पहले भी लोड/प्रीरेंडर करने से पहले चुनना चाहते हैं। dropdownbox के लिए ईवेंट OnPrerender या OnLoad का उपयोग करें और चयनित आइटम को इस स्ट्रिंग पर सेट करें।

3

GridView_DataBound ईवेंट हैंडलर का उपयोग समस्या हल करता है।

अपने मामले में आप PK_DepartmentId मूल्य स्टोर करने के लिए एक HiddenField जोड़ने की आवश्यकता होगी:

<asp:GridView ID="gvExample" runat="server" AutoGenerateColumns="False" OnDataBound="gvExample_DataBound"> 
    <Columns> 
    <asp:TemplateField HeaderText="Department"> 
     <EditItemTemplate> 
     <asp:DropDownList ID="ddlDepartment_Edit" runat="server" DataSourceID="dsDepartment_Edit" 
      DataTextField="DepartmentName" DataValueField="PK_DepartmentId"> 
     </asp:DropDownList> 
     <asp:HiddenField ID="hfDepartmentId" runat="server" Value='<%# Bind("PK_DepartmentId") %>' /> 
     <asp:SqlDataSource ID="dsDepartment_Edit" runat="server" ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>" 
      ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" SelectCommandType="StoredProcedure"> 
     </asp:SqlDataSource> 
     </EditItemTemplate> 
     <ItemTemplate> 
     <asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>'> 
     </asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:CommandField ShowEditButton="True" ButtonType="Button" /> 
    </Columns> 
</asp:GridView> 

protected void gvExample_DataBound(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvRow in gvExample.Rows) 
    { 
    DropDownList ddlDepartment = gvRow.FindControl("ddlDepartment_Edit") as DropDownList; 
    HiddenField hfDepartmentId = gvRow.FindControl("hfDepartmentId") as HiddenField; 

    if (ddlDepartment != null && hfDepartmentId != null) 
    { 
     ddlDepartment.SelectedValue = hfDepartmentId.Value; 
    } 
    } 
} 
+0

धन्यवाद !! समस्या का हल किया –

0

यह सबसे अच्छा मैं पाया है है ....

protected void GridView1_DataBound(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvRow in GridView1.Rows) 
    { 
     RadioButtonList rbl = gvRow.FindControl("rblPromptType") as RadioButtonList; 
     HiddenField hf = gvRow.FindControl("hidPromptType") as HiddenField; 

     if (rbl != null && hf != null) 
     { 
      if (hf.Value != "") 
      { 
       //clear the default selection if there is one 
       rbl.ClearSelection(); 
      } 

      rbl.SelectedValue = hf.Value; 
     } 
    } 
} 
0

क्यों तुम लोग सुझाव दे रहे हैं लूप का उपयोग करने के लिए, जब GridView विधि विशेष रूप से बनाई जाती है जब पंक्ति की स्थिति बदलती है - RowDataBound()?

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      GridViewRow gvRow = (GridViewRow)e.Row; 
      HiddenField hfAgentID = (HiddenField)gvRow.FindControl("hfAgentID"); 
      if (hfAgentID != null) 
      { 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        DropDownList ddlAgent = (DropDownList)gvRow.FindControl("ddlAgent"); 
        ddlAgent.SelectedValue = hfAgentID.Value; 
       } 
      } 
     } 
संबंधित मुद्दे