DropDownList未显示RadGrid的EditItemTemplate中的Selected Value

时间:2015-07-14 02:16:21

标签: c# asp.net drop-down-menu radgrid

我在RadGrid中使用asp DropDownList,并尝试在Database表中添加和更新DropDownList项。

以下是RadGrid的EditItemTemplate中DropDownList的HTML代码:

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code">
       <ItemTemplate>
           <asp:Label ID="lblAcCode" runat="server" Text='<%# Eval("AccountCode")%>'></asp:Label>
       </ItemTemplate>
       <EditItemTemplate>
           <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>'></asp:Label>
           <asp:DropDownList ID="ddlAcCode" DataTextField="AccountDescription" DataValueField="AccountCodeID" runat="server"/> 
       </EditItemTemplate>
</telerik:GridTemplateColumn>

C#代码:

    public DataTable GetAccCode(string CompanyCode)
        {
            SqlConnection con = new SqlConnection(strcon);
            SqlCommand cmd = new SqlCommand("[Invoice].[usp_tbl_AccountCode_DL_Test]", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@CompanyCode", CompanyCode);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            try
            {
                con.Open();
                da.Fill(dt);
                con.Close();
            }
            catch (Exception ex)
            {
            }
            return dt;
        }

    protected void RGGSTAcCode_ItemDataBound(object sender, GridItemEventArgs e)
        {

           if (e.Item is GridEditableItem && e.Item.IsInEditMode)
                {
                    //bind dropdwon while "Add" 
                    string CompanyCode = ddlCompany.SelectedValue.ToString();
                    GridEditableItem item = (GridEditableItem)e.Item;
                    DropDownList ddl = (DropDownList)item.FindControl("ddlAcCode");
                    ddl.DataSource = GetAccCode(CompanyCode);
                    ddl.DataTextField = "AccountDescription";
                    ddl.DataValueField = "AccountCodeID";
                    ddl.DataBind();
                    ddl.Items.Insert(0, "- Select -");

                    //Select particular dropdown value while "Edit"
                    string accCodeID =  item.GetDataKeyValue("AccountCodeID").ToString();
                    Label lblAcCode2 = item.FindControl("lblAcCode") as Label;

                    //if (!string.IsNullOrEmpty(lblAcCode2.Text))
                    //{
                        ddl.SelectedValue = lblAcCode2.Text;
                    //}
                    //string SelectedVal =  ddl.SelectedValue;

                if (!string.IsNullOrEmpty(lblAcCode2.Text))
                {
                    SqlConnection con = new SqlConnection(strcon);
                    con.Open();
                    SqlDataAdapter adapter = new SqlDataAdapter();
                    adapter.SelectCommand = new SqlCommand("SELECT [AccountCode]+' - '+[AccountDescription] as [AccountDescription] FROM [Sunway_AP].[Invoice].[tbl_AccountCodeTest] where AccountCodeID='" + accCodeID + "' ", con);

                    DataTable dt = new DataTable();
                    try
                    {
                        adapter.Fill(dt);
                    }
                    finally
                    {
                        con.Close();
                    }
                    ddl.SelectedValue = dt.ToString();
                    string SelectedVal = ddl.SelectedValue;
                }

             }
         }

这是存储过程:

ALTER PROCEDURE [Invoice].[usp_tbl_AccountCode_DL_Test]
    @CompanyCode nvarchar(50)
AS
BEGIN   
    SET NOCOUNT ON;   
       SELECT [AccountCodeID] ,[AccountCode]+' - '+[AccountDescription] as [AccountDescription]     
       FROM [Sunway_AP].[General].[tbl_AccountCode] (NOLOCK)
       Where [CompanyCode] = @CompanyCode
       order by [AccountCode]+' - '+[AccountDescription]

END

我的问题是:我无法获取&#34; DropDownList&#34;编辑时,特定Id(RadGrid的特定行)的选定值。 每次当我尝试从后面的代码设置DropdownList的选定值时,它会显示第一项&#39; - 选择 - &#39;在所选值内。

请回复我的代码中的错误。 我是Telerik的新人。提前谢谢。

1 个答案:

答案 0 :(得分:1)

修改了我发布的代码,如下所示:

protected void RGGSTAcCode_ItemDataBound(object sender, GridItemEventArgs e)
    {

       if (e.Item is GridEditableItem && e.Item.IsInEditMode)
            {
                //bind dropdwon while "Add" 
                string CompanyCode = ddlCompany.SelectedValue.ToString();
                GridEditableItem item = (GridEditableItem)e.Item;
                DropDownList ddl = (DropDownList)item.FindControl("ddlAcCode");
                ddl.DataSource = GetAccCode(CompanyCode);
                ddl.DataTextField="*your text field*";
                ddl.DataValueField="*your Value field*";
                ddl.DataBind();
                ddl.Items.Insert(0, "- Select -");

               Label lblAcCode2 = item.FindControl("lblAcCode2") as Label;
               if (!string.IsNullOrEmpty(lblAcCode2.Text))
               {
                  ddl.SelectedItem.Text = lblAcCode2.Text;
                  ddl.SelectedValue = lblAcCode2.Text;
               }
           }
     }

    <telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code">
       <ItemTemplate>
         <asp:Label ID="lblAcCode" runat="server" Text='<%# Eval("AccountCode")%>'></asp:Label>
       </ItemTemplate>
       <EditItemTemplate>
         <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label>
         <asp:DropDownList ID="ddlAcCode" DataTextField="AccountDescription" DataValueField="AccountCodeID" runat="server"/> 
       </EditItemTemplate>
   </telerik:GridTemplateColumn>

希望这会有所帮助......

一切顺利......