FineUI 官方论坛

标题: 表格中DropDownList值的改变,从后台更新其他单元格的值 [打印本页]

作者: 928835106    时间: 2017-6-1 11:09
标题: 表格中DropDownList值的改变,从后台更新其他单元格的值
  <f:Grid ID="Grid_Sru" runat="server" Title="SRU(Shop Replacement Units)" ShowHeader="false" ShowBorder="false" EnableTextSelection="true" AllowCellEditing="true" ForceFit="true" ClicksToEdit="1" DataKeyNames="N">
                                                     <Columns>
                                                      <f:RenderField  ColumnID="WORK_DECISION" DataField="WORK_DECISION" FieldType="String" HeaderText="Workshop Decision"  RendererFunction="renderDecision">
                                                       <Editor>
                                                           <fropDownList ID="ddl" Required="true" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_OnSelectedIndexChanged" ForceSelection="true">
                                                           <fistItem Text="Scrap" Value="SC" Selected="true"/>
                                                            <fistItem Text="Replacement" Value="RE" />
                                                         </fropDownList>
                                                      </Editor>
                                                      </f:RenderField>

                                                         <f:TemplateField>
                                                             <ItemTemplate>
                                                                    <asp:TextBox runat="server" Width="100%" ID="TextBox8" Text=''></asp:TextBox>
                                                             </ItemTemplate>
                                                         </f:TemplateField>
                                                </Columns>
                                                 </f:Grid>


如何根据DropDownList 选择的值的改变,从后台数据库里面查询数据,然后将查询出来的数据显示在该行的TextBox8里面,TextBox8为只读属性。

作者: sanshi    时间: 2017-6-1 11:37
这个不难,你基于空项目模拟实现发给客服QQ,会帮你补充完整(保证可以VS打开直接运行):2877408506@qq.com
作者: 928835106    时间: 2017-6-2 09:42
已经发邮件给你了,谢谢。
作者: sanshi    时间: 2017-6-2 10:06
已收到,不过你给的项目打开报错,并且是基于开源版的,不是专业版的。
请重新基于专业版空项目重现问题,并正常运行后发给我。


[attach]10216[/attach]



作者: sanshi    时间: 2017-6-2 21:56
一个重要的概念要先搞清楚:单元格编辑中,所有操作都是对单元格而言的,而不是单元格的编辑器(Editor)。

所以,我们需要注册表格的 AfterEdit 事件,而不是DropDownList的SelectedIndexChanged 事件,主要代码:
  1. <f:Grid ID="Grid_Sru" runat="server" Title="SRU(Shop Replacement Units)" ShowHeader="false" ShowBorder="false" EnableTextSelection="true" AllowCellEditing="true" ForceFit="true" ClicksToEdit="1" DataKeyNames="PN"
  2.         EnableAfterEditEvent="true" OnAfterEdit="Grid_Sru_AfterEdit" >
  3.         <Columns>
  4.                 <f:RenderField ColumnID="PN" DataField="PN" FieldType="String" HeaderText="PN"></f:RenderField>
  5.                 <f:RenderField ColumnID="WORK_DECISION" DataField="WORK_DECISION" FieldType="String" HeaderText="Workshop Decision" RendererFunction="renderDecision">
  6.                         <Editor>
  7.                                 <f:DropDownList ID="ddl" Required="true" runat="server" ForceSelection="true">
  8.                                         <f:ListItem Text="Scrap" Value="SC" Selected="true" />
  9.                                         <f:ListItem Text="Replacement" Value="RE" />
  10.                                 </f:DropDownList>
  11.                         </Editor>
  12.                 </f:RenderField>
  13.                 <f:RenderField ColumnID="Price" DataField="price" HeaderText="Price">
  14.                         <Editor>
  15.                                 <f:TextBox runat="server" Readonly="true" ID="TextBox8"></f:TextBox>
  16.                         </Editor>
  17.                 </f:RenderField>
  18.         </Columns>
  19. </f:Grid>
复制代码
后台代码:
  1. protected void Grid_Sru_AfterEdit(object sender, GridAfterEditEventArgs e)
  2.         {
  3.             if (e.ColumnID == "WORK_DECISION")
  4.             {
  5.                 // pn = "2"
  6.                 var pn = Grid_Sru.DataKeys[e.RowIndex][0].ToString();

  7.                 // decisionValue = "RE"
  8.                 var values = Grid_Sru.GetMergedData()[e.RowIndex].Value<JObject>("values");
  9.                 var decisionValue = values.Value<string>("WORK_DECISION");

  10.                 // 更新某个单元格的值
  11.                 var updateScript = Grid_Sru.GetUpdateCellValueReference(e.RowIndex, "Price", "21");
  12.                 updateScript = "F.noEvent(function () {" + updateScript + "});";
  13.                 PageContext.RegisterStartupScript(updateScript);
  14.             }
  15.         }
复制代码

[attach]10220[/attach]
作者: 928835106    时间: 2017-8-23 14:43
但是现在存在这样一种情况就是:在你多次修改的时候获取的decisionValue 都是同一个值,应为只更改了Grid_Sru.GetUpdateCellValueReference(e.RowIndex, "Price", "21");如何两个值都更改?

                 var values = Grid_Sru.GetMergedData()[e.RowIndex].Value<JObject>("values");
                var decisionValue = values.Value<string>("WORK_DECISION");
作者: sanshi    时间: 2017-8-23 16:28
928835106 发表于 2017-8-23 14:43
但是现在存在这样一种情况就是:在你多次修改的时候获取的decisionValue 都是同一个值,应为只更改了Grid_S ...



下面是更新一个单元格的值:
  1. // 更新某个单元格的值
  2.                 var updateScript = Grid_Sru.GetUpdateCellValueReference(e.RowIndex, "Price", "21");
  3.                 updateScript = "F.noEvent(function () {" + updateScript + "});";
  4.                 PageContext.RegisterStartupScript(updateScript);
复制代码


当然你可以更新多个单元格的值:
  1. // 更新某个单元格的值
  2. var updateScript1 = Grid_Sru.GetUpdateCellValueReference(e.RowIndex, "Price", "21");
  3. var updateScript2 = Grid_Sru.GetUpdateCellValueReference(.。。。。。。);
  4. var updateScript = "F.noEvent(function () {" + updateScript1 + updateScript2 + "});";
  5. PageContext.RegisterStartupScript(updateScript);
复制代码



作者: 928835106    时间: 2017-8-23 16:33
我试过这种方法 ,下次取到的 var decisionValue = values.Value<string>("WORK_DECISION"); 还是我第一次更改的值。
作者: 928835106    时间: 2017-8-23 16:49
我已经试过这种方法了,没用,我可能反应的情况不是很准确。

比如页面加载的时候  WORK_DECISION 是Xchange ,price是5
1.我修改work_decisin为Scrap/Replacement ,对应的价格是3.  到这一步是正确的。
2.我又将work_decisin为Xchange,但是我在后台获取的    decisionValue = values.Value<string>("WORK_DECISION"); 还是 Scrap/Replacement 。




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4