首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有CommandArgument的GridView按钮

带有CommandArgument的GridView按钮
EN

Stack Overflow用户
提问于 2017-04-11 23:39:22
回答 2查看 4.3K关注 0票数 2

我正试图在按一下按钮时得到一个身份证明。我的按钮在GridView里面

代码语言:javascript
复制
<asp:GridView runat="server" AutoGenerateColumns="false"
                            ID="UsersGridView" AllowPaging="true"
                            CssClass="table table-hover table-striped"
                            UseAccessibleHeader="true" GridLines="None">
                    <Columns>
                        <asp:BoundField DataField="User.FullName" HeaderText="User" />
                        <asp:BoundField DataField="Book.Title" HeaderText="Book" />
                        <asp:BoundField DataField="BooksReserved.DateOut" HeaderText="Return Date" 
                            FooterStyle-BackColor="#ff0000" DataFormatString="{0:d}" />
                        <asp:TemplateField ShowHeader="false">
                            <ItemTemplate>
                                <asp:LinkButton ID="userProfile" runat="server" OnCommand="userProfile_Command"
                                    CommandArgument='<% Eval("User.Id") %>'
                                    Text="Open User Profile" CssClass="btn btn-success" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

在方法Page_Load后面的代码中,我从3个表中加载了网格视图的数据:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    // Users Grid
    var query = from u in db.Users
                join br in db.BooksReserveds on u.Id equals br.UserId
                join b in db.Books on br.BookId equals b.Id
                where br.DateOut < DateTime.Today
                orderby br.DateOut
                select new { User = u, BooksReserved = br, Book = b };

    UsersGridView.DataSource = query.ToList();
    UsersGridView.DataBind(); }

在单击按钮时,我试图获得id:

代码语言:javascript
复制
protected void userProfile_Command(object sender, CommandEventArgs e)
{
    try
    {
        int id = Int32.Parse(e.CommandArgument.ToString());
        var query = from u in db.Users
                    where u.Id == id
                    select u;
    } catch(Exception any)
    {
        Console.WriteLine(any.ToString());
    }
}

我得到了一个例外:“输入字符串格式不正确。”

有人知道为什么吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-11 23:59:33

你忘了#。语法应该是<%# %>

代码语言:javascript
复制
<asp:LinkButton ID="userProfile" runat="server" OnCommand="userProfile_Command"
   CommandArgument='<%# Eval("User.Id") %>'
   Text="Open User Profile" CssClass="btn btn-success" />
票数 6
EN

Stack Overflow用户

发布于 2017-04-12 00:16:29

在您的Page_Load事件处理程序中,您正在对query变量执行select new操作,使该变量成为一个匿名对象:

代码语言:javascript
复制
// Users Grid
//by using var here and select new this object is anonymous.
var query = from u in db.Users
            join br in db.BooksReserveds on u.Id equals br.UserId
            join b in db.Books on br.BookId equals b.Id
            where br.DateOut < DateTime.Today
            orderby br.DateOut
            select new { User = u, BooksReserved = br, Book = b };

UsersGridView.DataSource = query.ToList();
UsersGridView.DataBind();

您需要一个定义的对象,您可以在Gridview的ItemTemplate中对其进行转换。就像这样:

代码语言:javascript
复制
public class UserGridViewModel
{
    public User User { get; set; }
    public BooksReserved BooksReserved { get; set; } //sounds like it could be a collection, but I do not know.
    public Book Book { get; set; }
}

然后,返回到Page_Load UserGrid选择查询:

代码语言:javascript
复制
// Users Grid -- Notice the select new UserGridViewModel()
var query = from u in db.Users
        join br in db.BooksReserveds on u.Id equals br.UserId
        join b in db.Books on br.BookId equals b.Id
        where br.DateOut < DateTime.Today
        orderby br.DateOut
        select new UserGridViewModel() { User = u, BooksReserved = br, Book = b };

然后,在Gridviw中,ItemTemplate本质上是一个命名容器,对于该容器,您需要获得DataItem,它将是一个UserGridViewModel对象(您必须将dataItem转换到模型中)。请参见命令参数的这段代码(还请注意此服务器打开<%#):

代码语言:javascript
复制
CommandArgument='<%# ((UserGridViewModel)Container.DataItem).User.Id %>'

您的UserGridViewModel中的任何其他变量都可以在ItemTemplate中以类似的方式访问。

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

https://stackoverflow.com/questions/43357907

复制
相关文章

相似问题

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