Bind/Display 在 RadGrid 的 "Edit" 模式下,两个不同的列数据一起放在特定 Id 的下拉列表中

Bind/Display the two different columns data together inside a Dropdown for a particluar Id in "Edit" mode of RadGrid

我在 Telerik RadGrid 中有 4 列
1) Account Code (仅在"Edit"和"Add"模式下显示的列-下拉)
2) 账户描述
3) 金额
4) 备注

下面是我使用的"Add"模式代码:

HTML代码:

    <mastertableview ShowHeadersWhenNoRecords="true" autogeneratecolumns="false" datakeynames="AccountCodeID" InsertItemDisplay="Top"
                        insertitempageindexaction="ShowItemOnCurrentPage" ShowFooter="True" CommandItemDisplay="Top">                                   
                             <Columns> 
                                 <telerik:GridEditCommandColumn></telerik:GridEditCommandColumn> 

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

                                 <telerik:GridBoundColumn DataField="AccountDescription" HeaderText="Description" UniqueName="AccountDescription" SortExpression="AccountDescription" InsertVisiblityMode="AlwaysHidden" ReadOnly="true" ></telerik:GridBoundColumn>
                                 <telerik:GridBoundColumn aggregate="SUM" DataField="Amount" HeaderText="Amount" FooterText="Total : " UniqueName="Amount" SortExpression="Amount"></telerik:GridBoundColumn>
                                 <telerik:GridBoundColumn DataField="Remark" HeaderText="IFCA Remark" UniqueName="Remark" SortExpression="Remark">

                                 </telerik:GridBoundColumn>    

                                 <telerik:GridButtonColumn CommandName="Delete" Text="Delete" UniqueName="DeleteColumn"></telerik:GridButtonColumn>                                                                            
                          </Columns>
                          <EditFormSettings>
                           <EditColumn ButtonType="ImageButton" />
                          </EditFormSettings>
                          <CommandItemSettings AddNewRecordText="Add new record" RefreshText="Refresh"></CommandItemSettings>
</mastertableview>

C#代码:

protected void RGGSTAcCode_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridEditableItem && e.Item.IsInEditMode)
        {
            GridEditableItem item = e.Item as GridEditableItem;

            string CompanyCode = ddlCompany.SelectedValue.ToString();
            DropDownList list = item.FindControl("ddlAcCode") as DropDownList;
            list.DataTextField = "AccountDescription";
            list.DataValueField = "AccountCodeID";
            list.DataSource = GetAccCode(CompanyCode);
            list.DataBind();
            list.Items.Insert(0, "- Select -");
        }       
    }

protected void RGGSTAcCode_InsertCommand(object sender, GridCommandEventArgs e)
    {
        GridEditableItem item = e.Item as GridEditableItem;

        DropDownList accountCode = item.FindControl("ddlAcCode") as DropDownList;
        string SelectedAccCode = accountCode.SelectedItem.Text;

        //split dropdown 2 vales
        string accCode = SelectedAccCode.Substring(0, SelectedAccCode.IndexOf('-')).Trim(); //getting a/c code
        string accDesc = SelectedAccCode.Substring(SelectedAccCode.IndexOf('-') + 1).Trim(); //getting a/c descr

        InsertAccountCode(new Guid(TempGUID.Text), accCode, accDesc);
        BindGrid();
        RGGSTAcCode.Rebind();
    }

"Account code" 列仅在 RadGrid 的 "Add" 和 "Edit" 模式下显示。这是一个下拉列表,我必须在其中将 2 个值绑定在一起,即帐户代码 + 帐户描述,并且必须将其显示并保存在数据库的单独列中。 (即帐户代码列中的帐户代码值和描述列中的帐户描述值)

现在我的要求是: 在做 "Edit" 时,我想 bind/display "Account code" 列数据和 "Account Description" 列数据一起放在 Dropdown 中,它保存在数据库中用于特定 ID。就像我们在编辑时绑定下拉列表一样。

编辑下拉项后,数据将保存到数据库的两个不同列,就像我在添加记录时所做的那样。

只是我不知道如何在执行 "Edit" 时 display/bind 在下拉列表中将两个不同的列数据放在一起。 请提出一些解决方案。

我希望我能把我的要求说清楚。 提前致谢。

嗯..清除你对这个问题的想法。

您使用的是什么类型的数据绑定是否是高级数据绑定/sqldatasource 数据绑定?

无论如何,你的网格中有四列!所以像下面这样更改您的 select 查询。

SELECT accountcode, accountdesc, amount, remark, convert(varchar(20),accountcode)+' '+accountdesc as accdetail FROM YOURTABLENAME <-- 记下accdetails.

我将字段 accountcodeaccountdesc 连接为 accdetail 为空 space)。 所以现在你的网格有 5 行。 在该 accdetail 列中使用 Visible="false" 隐藏 gridview 中的第五行。 不要修改帐户代码列。
仅在下拉列表中进行更改。

 <asp:DropDownList ID="ddlAccdetail" DataTextField="accdetail" DataValueField="accdetail" runat="server"/>

现在下拉菜单将在编辑模式下将内容显示为 accountcode accountdesc

Insert 上,执行以下代码更改

protected void RGGSTAcCode_InsertCommand(object sender, GridCommandEventArgs e)
{
  GridEditableItem item = e.Item as GridEditableItem;
  DropDownList ddlAccdetail = item.FindControl("ddlAccdetail") as DropDownList;
  
  string Accdetail = ddlAccdetail.SelectedItem.Text;
  string accCode=Accdetail.Split(' ')[0];   //Splitting the string 
  string accDesc=Accdetail.Split(' ')[1];   //with that added empty space

  InsertAccountCode(new Guid(TempGUID.Text), accCode, accDesc);
  BindGrid();
  RGGSTAcCode.Rebind();
}
就是这样,希望它会起作用。但请记住,如果默认情况下 accountcodeaccountdesc 字段中有任何空 space,则需要更改 Empty space 到任何特殊字符,如 ( - , * , / ,)