Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套细节视图插入方法';s参数_C#_Asp.net - Fatal编程技术网

C# 嵌套细节视图插入方法';s参数

C# 嵌套细节视图插入方法';s参数,c#,asp.net,C#,Asp.net,我在GridView中嵌套了DetailsView,我不知道如何将值(如GridView中项的ID和会话中的值)传递给insert方法的参数 <asp:DetailsView ID="DetailsViewPostLikes" runat="server" AutoGenerateRows="false" DataSourceID="odsPostLikes" DataKeyNames="id" G

我在GridView中嵌套了DetailsView,我不知道如何将值(如GridView中项的ID和会话中的值)传递给insert方法的参数

             <asp:DetailsView ID="DetailsViewPostLikes" runat="server"
                AutoGenerateRows="false" DataSourceID="odsPostLikes" 
                DataKeyNames="id" GridLines="None">
                <Fields>
                <asp:CommandField ShowInsertButton="true" InsertText="Like" newtext="Like" />
                    <asp:TemplateField HeaderText="" SortExpression="Nickname">
                        <ItemTemplate>
                            <asp:Label id="nicknamelikesCount" runat="server" Text='<%# Bind("LikeCount") %>'></asp:Label> people likes this.                                
                        </ItemTemplate>
                    </asp:TemplateField>
                </Fields>
              </asp:DetailsView>
              <asp:ObjectDataSource ID="odsPostLikes" runat="server" 
                TypeName="SocWebApp.Database.PostLikeTable"
                SelectMethod="Select" InsertMethod="Insert" UpdateMethod="Update">
                <SelectParameters>
                    <asp:Parameter Name="postId" Type="Int32" />
                </SelectParameters>
                <InsertParameters>
                    <asp:Parameter Name="postId" Type="Int32" />
                    <asp:SessionParameter Name="userId" SessionField="User_id" Type="Int32" />
                </InsertParameters>
              </asp:ObjectDataSource>
但只设置了userId参数值(来自会话),postId始终为0

正确的解决方案是什么?
谢谢。

我找到了解决方案:

<asp:DetailsView ID="DetailsViewPostLikes" runat="server"
                AutoGenerateRows="false" DataSourceID="odsPostLikes"
                DataKeyNames="id" GridLines="None" OnDataBound="postLikeInsert_DataBound" OnItemCommand="postLikeInsert_ItemCommand">
                <Fields>
                <asp:CommandField ShowInsertButton="false" InsertText="Like" newtext="Like" />
                    <asp:TemplateField HeaderText="" SortExpression="Nickname">
                        <ItemTemplate>
                            <asp:LinkButton ID="Like" runat="server" CommandName="Insert" Text="Like" />
                            <asp:Label id="likesCount" runat="server" Text='<%# Bind("LikeCount") %>'></asp:Label> people likes this.
                        </ItemTemplate>
                    </asp:TemplateField>
                </Fields>
              </asp:DetailsView>
              <asp:ObjectDataSource ID="odsPostLikes" runat="server"
                TypeName="SocWebApp.Database.PostLikeTable"
                SelectMethod="Select" InsertMethod="Insert" UpdateMethod="Update">
                <SelectParameters>
                    <asp:Parameter Name="postId" Type="Int32" />
                </SelectParameters>
                <InsertParameters>
                    <asp:Parameter Name="postId" Type="Int32" />
                    <asp:SessionParameter Name="userId" SessionField="User_id" Type="Int32" />
                </InsertParameters>
              </asp:ObjectDataSource>
当数据绑定时,它会找到按钮并将其命令参数设置为父gridview的id项,然后在点击按钮后,根据该命令参数设置插入参数

<asp:DetailsView ID="DetailsViewPostLikes" runat="server"
                AutoGenerateRows="false" DataSourceID="odsPostLikes"
                DataKeyNames="id" GridLines="None" OnDataBound="postLikeInsert_DataBound" OnItemCommand="postLikeInsert_ItemCommand">
                <Fields>
                <asp:CommandField ShowInsertButton="false" InsertText="Like" newtext="Like" />
                    <asp:TemplateField HeaderText="" SortExpression="Nickname">
                        <ItemTemplate>
                            <asp:LinkButton ID="Like" runat="server" CommandName="Insert" Text="Like" />
                            <asp:Label id="likesCount" runat="server" Text='<%# Bind("LikeCount") %>'></asp:Label> people likes this.
                        </ItemTemplate>
                    </asp:TemplateField>
                </Fields>
              </asp:DetailsView>
              <asp:ObjectDataSource ID="odsPostLikes" runat="server"
                TypeName="SocWebApp.Database.PostLikeTable"
                SelectMethod="Select" InsertMethod="Insert" UpdateMethod="Update">
                <SelectParameters>
                    <asp:Parameter Name="postId" Type="Int32" />
                </SelectParameters>
                <InsertParameters>
                    <asp:Parameter Name="postId" Type="Int32" />
                    <asp:SessionParameter Name="userId" SessionField="User_id" Type="Int32" />
                </InsertParameters>
              </asp:ObjectDataSource>
protected void postLikeInsert_DataBound(object sender, EventArgs e)
    {
        DetailsView d = (DetailsView)sender;
        GridViewRow row = (GridViewRow)d.NamingContainer;
        int idx = row.RowIndex;
        GridView grid = (GridView)row.NamingContainer;
        string strGoalIndicatorID = grid.DataKeys[idx]["id"].ToString();

        LinkButton b = (LinkButton)d.FindControl("Like");
        b.CommandArgument = strGoalIndicatorID;

    }

    protected void postLikeInsert_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    {
        if (e.CommandName == "Insert")
        {
            DetailsView d = (DetailsView)sender;
            d.ChangeMode(DetailsViewMode.Insert);
            ObjectDataSource o = (ObjectDataSource)d.NamingContainer.FindControl("odsPostLikes");
            o.InsertParameters["postId"].DefaultValue = e.CommandArgument.ToString();
        }
    }