首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将webdatagrid的更改提交到会话?

如何将webdatagrid的更改提交到会话?
EN

Stack Overflow用户
提问于 2015-03-11 01:14:55
回答 1查看 1.2K关注 0票数 0

我正在尝试将网格的数据源设置为会话变量,并将其绑定,这是有效的。然后,我想在datagrid中添加一行,并将插入的行持久化回session。使用下面的代码,在editing.commit()之后,我得到一个AJAX同步失败(空引用异常)错误。

我认为这与var newMarket数组没有正确数量的字段有关,所以我尝试使用

代码语言:javascript
复制
var newMarket = [1,"q", "q", "q", true, "03/12/2015", 
"62F387C7-CC7D-4491-9C71-10EC254F6EB9", "03/12/2015", 
"62F387C7-CC7D-4491-9C71-10EC254F6EB9"]

但是我得到了同样的错误。

请注意:"1“是一个标识字段,我认为我需要填充它,最后一个"q”之后的字段是在存储的proc中设置的。而且,我在javascript中对这些值进行了硬编码,以提高测试速度。

下面是我的代码。

代码语言:javascript
复制
<ig:WebDataGrid ID="marketListGrid" runat="server" AutoGenerateColumns="False" DataKeyFields="ID" Height="500px">
<Columns>
    <ig:BoundDataField Key="MarketName" DataFieldName="MarketName" Width="135px" Header-Text="Market Name">
    </ig:BoundDataField>
    <ig:BoundDataField Key="MarketShorthand" DataFieldName="MarketShorthand" Width="132px" Header-Text="Market Shorthand">
    </ig:BoundDataField>
</Columns>
<Behaviors>
    <ig:Sorting>
    </ig:Sorting>
    <ig:ColumnResizing>
    </ig:ColumnResizing>
    <ig:Selection CellClickAction="Row" RowSelectType="Single">
        <SelectionClientEvents RowSelectionChanged="" />
    </ig:Selection>
    <ig:EditingCore Enabled="True" BatchUpdating="True"></ig:EditingCore>
</Behaviors>

代码语言:javascript
复制
<div>
    <input id="insertMarketButton" type="button" value="Insert Market"       onclick="insertMarketButton_Clicked();" />
</div>

<ig:WebDialogWindow ID="insertMarketDialog" runat="server" Width="650px" Height="400px" InitialLocation="Centered" Modal="True" WindowState="Hidden">
<Header CaptionText="Create New Market"></Header>
<ContentPane>
    <Template>
        <div>
            <div class="labelText">
                <asp:Label ID="marketNameDialogLabel" runat="server" CssClass="fieldGrpLabel" Text="Market Name"
                    AssociatedControlID="marketNameDialogTextBox"></asp:Label>
                <div class="valueControl">
                    <asp:TextBox ID="marketNameDialogTextBox" runat="server" CssClass="name_TextBox"
                        MaxLength="64"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="marketNameDialogTextBoxRequired" runat="server" ControlToValidate="marketNameDialogTextBox"
                        ErrorMessage="Market name is required." Text="*" ToolTip="Market name is required." ValidationGroup="insertMarketValidationGroup">
                    </asp:RequiredFieldValidator>
                </div>
                <div class="labelText">
                    <asp:Label ID="marketDescriptionDialogLabel" runat="server" CssClass="descriptionLabel" Text="Market Description"
                        AssociatedControlID="marketDescriptionDialogTextBox"></asp:Label>
                </div>
                <div class="valueControl">
                    <asp:TextBox ID="marketDescriptionDialogTextBox" runat="server" CssClass="description_TextBox"
                        TextMode="MultiLine" MaxLength="512"></asp:TextBox>
                </div>
                <div class="labelText">
                    <asp:Label ID="marketShorthandDialogLabel" runat="server" CssClass="fieldGrpLabel" Text="Market Shorthand"
                        AssociatedControlID="marketShorthandDialogTextBox"></asp:Label>
                </div>
                <div class="valueControl">
                    <asp:TextBox ID="marketShorthandDialogTextBox" runat="server" CssClass="shorthand_TextBox"
                        MaxLength="16"></asp:TextBox>
                </div>
                <div class="updateButton">
                    <input type="button" value="Insert Market" onclick="return add();" />
                    <asp:Button ID="cancelMarketDialogButton" runat="server" Text="Cancel" CssClass="buttonHeight" UseSubmitBehavior="false" />
                </div>
            </div>
        </div>
    </Template>
</ContentPane>

代码语言:javascript
复制
input id="currentUserID" runat="server" type="hidden" value="" />
<input id="selectedMarketID" runat="server" type="hidden" value="0" />
<input id="selectedRegionID" runat="server" type="hidden" value="0" />
<input id="selectedStateID" runat="server" type="hidden" value="0" />
<input id="selectedAreaID" runat="server" type="hidden" value="0" />
<input id="market" runat="server" type="hidden" />

<script type="text/javascript" language="javascript">
var marketData;
var marketDlg;
var selectedMarketID;
var marketName = $get('<%= marketNameDialogTextBox.ClientID %>');
var marketDescription = $get('<%= marketDescriptionDialogTextBox.ClientID %>');
var marketShorthand = $get('<%= marketShorthandDialogTextBox.ClientID %>');

$(function () {
    marketDlg = $find('<%= insertMarketDialog.ClientID %>');
    selectedMarketID = $get('<%= selectedMarketID.ClientID %>').value;
});

function marketListGrid_SelectionChanged(sender, eventArgs) {
    var rows = eventArgs.getSelectedRows();
    var selectedRow = rows.getItem(0);
    document.getElementById('<%= selectedMarketID.ClientID %>').value = selectedRow.get_dataKey();
}

function insertMarketButton_Clicked() {
    if (marketDlg != null) {
        marketDlg.set_windowState($IG.DialogWindowState.Normal);
    }
}

function del() {
    if (selectedMarketID != "") {
        var grid = $find("<%= marketListGrid.ClientID %>");
        var rows = grid.get_rows();
        var row = rows.get_rowFromKey(selectedMarketID);
        rows.remove(row, false);
    } else {
        alert("");
    }
}

function add() {
    var grid = $find("<%= marketListGrid.ClientID %>");
    var rows = grid.get_rows();
    var newMarket = ["q", "q", "q"];
    rows.add(newMarket);

    marketDlg.set_windowState($IG.DialogWindowState.Hidden);

    committing(grid);

    return true;
}

function committing(grid) {
    var editing = grid.get_behaviors().get_editingCore();
    editing.commit();
}

代码语言:javascript
复制
private List<Market> MarketList
{
    get { return (List<Market>) Session["MarketList"]; }
    set { Session["MarketList"] = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
        BindMarkets();
}

private void BindMarkets()
{
    while (true)
    {
        if (MarketList != null)
        {
            marketListGrid.DataSource = MarketList;
            marketListGrid.DataBind();
        }
        else
        {
            MarketList = GetAllMarkets();
            continue;
        }
        break;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-16 07:18:25

您不能将Infragistics网格绑定到基于会话的列表。您将在单击updateButton时执行回发,将新项插入到基于会话的集合中,然后重新绑定。除非您要更新/删除记录,否则只需禁用EditingCore。如果需要更新/删除记录,请为RowUpdating和RowDeleting事件添加服务器端处理程序,并再次编写自己的代码来更新/删除集合中的记录,然后从那里重新绑定。如果需要ajax功能,可以使用UpdatePanels。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28970035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档