将数据从一个Gridview复制到另一个Gridview [英] Copy data from one Gridview to another Gridview

查看:191
本文介绍了将数据从一个Gridview复制到另一个Gridview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在一个项目中工作了一段时间,而且我正在努力弄清楚如何将数据从一个gridview复制到另一个gridview。



我想要做的是:我的web应用程序将列出用户在gridview中的所有内容(动态绑定到数据库),并且它将有一个+按钮,当单击时,它将复制该行的2列到另一个gridview。



我已经尝试过几次并且它可以复制第一行(无论哪一行),但是它不再起作用。



这是asp.net代码:



< div id =   Musicas  >  
< asp:GridView ID = GridView1 runat = server AutoGenerateColumns = False DataKeyNames = Name DataSourceID = ObjectDataSource1 OnRowCommand = GridView1_RowCommand >
< Columns>
< asp:BoundField DataField = 名称 HeaderText = 名称 SortExpression = 名称 />
< asp:BoundField DataField = 性别 HeaderText = 性别 SortExpression = 性别 />
< asp:BoundField DataField = 专辑 HeaderText = 专辑 SortExpression = 相册 />
< asp:BoundField DataField = ReleaseYear HeaderText = ReleaseYear SortExpression = ReleaseYear />
< asp:BoundField DataField = Composer HeaderText = Composer SortExpression = 作曲家 />
< asp:BoundField DataField = 艺术家 HeaderText = 艺术家 SortExpression = 艺术家 />
< asp:ButtonField ButtonType = 按钮 CommandName = 选择 HeaderText = AddPlayList ShowHeader = True Text = + />
< / >
< / asp:GridView >
< asp:ObjectDataSource ID = ObjectDataSource1 runat = server OnSelecting = ObjectDataSource1_Selecting SelectMethod = GetMusic TypeName = < span class =code-string> BLL.GetUserInformation >
< SelectParameters>
< asp:参数名称= id Type = String />
< / SelectParameters >
< / asp:ObjectDataSource >

< asp:GridView ID = GridView2 runat = server AutoGenerateColumns = False >
< Columns>
< asp:BoundField DataField = 名称 HeaderText = 名称 />
< / >
< / asp:GridView >
< / div >







以下是代码隐藏:



 私人列表<行> CopiedData 
{
get
{
if this .ViewState [ CopiedData] == null
{
this .ViewState [ CopiedData] = new List< Row>();
}

return this .ViewState [ CopiedData] as List< Row> ;;
}
}

受保护 void Page_Load( object sender,EventArgs e)
{

}


protected void ObjectDataSource1_Selecting( object sender,ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters [ 0 ] = User.Identity.Name;
}

protected void GridView1_RowCommand( object sender,GridViewCommandEventArgs e)
{
if (e.CommandName.Equals( 选择))
{
GridViewRow gvr = GridView1.Rows [Convert.ToInt32(e .CommandArgument)];
int id = Convert.ToInt32(GridView1.DataKeys [gvr.RowIndex] [ < span class =code-string>名称]);
string character = gvr.Cells [ 0 ]。文字;
行row = new 行{Id = id,Name = character};

if (!this.CopiedData.Exists(r = > r .Id == id))
{
this .CopiedData.Add(row);

GridView2.DataSource = this .CopiedData;
GridView2.DataBind();
}
}
}


[Serializable()]
private class
{
public int Id { get ; set ; }
public string 名称{ get ; set ; }
}





我遇到的问题是这行代码:



int id = Convert.ToInt32(GridView1.DataKeys [gvr.RowIndex] [Name]);

因为它总是将0重新调整为id,使得if( !this.CopiedData.Exists(r => r.Id == id))总是返回false,因此在选择第一行后它不会更新代码。



任何人都可以帮我这个吗?



先谢谢你,我的英语很差,不是我的主要语言。

解决方案

我认为首先你将网格视图数据带到数据表或数据集然后删除你不想要的列,然后将数据表绑定到你的第二列。



请参阅以下链接了解如何操作:



http://stackoverflow.com/questions/785799/how-can-i-export-a-gridview-数据源到数据表或数据集 [ ^ ]



如何在asp.net中获取数据集中的gridview数据 [ ^

I've been working in a project for some time now, and I'm having some hard times trying to figure out how to copy data from one gridview to another.

What I want to do is this: My web aplication will list all content the user have in a gridview (dynamically binded to a database), and it will have a button "+" that when clicked, it will copy that 2 columns of that row to another gridview.

I've tried some times and it works copy the very first row (no matter what row is that), but then it do not work anymore.

Here is the asp.net code:

<div id="Musicas">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Name" DataSourceID="ObjectDataSource1" OnRowCommand="GridView1_RowCommand">
        <Columns>
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:BoundField DataField="Gender" HeaderText="Gender" SortExpression="Gender" />
            <asp:BoundField DataField="Album" HeaderText="Album" SortExpression="Album" />
            <asp:BoundField DataField="ReleaseYear" HeaderText="ReleaseYear" SortExpression="ReleaseYear" />
            <asp:BoundField DataField="Composer" HeaderText="Composer" SortExpression="Composer" />
            <asp:BoundField DataField="Artist" HeaderText="Artist" SortExpression="Artist" />
            <asp:ButtonField ButtonType="Button" CommandName="Select" HeaderText="AddPlayList" ShowHeader="True" Text="+" />
        </Columns>
    </asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OnSelecting="ObjectDataSource1_Selecting" SelectMethod="GetMusic" TypeName="BLL.GetUserInformation">
        <SelectParameters>
            <asp:Parameter Name="id" Type="String" />
        </SelectParameters>
    </asp:ObjectDataSource>

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" />
    </Columns>
    </asp:GridView>
</div>




And here is the code-behind:

private List<Row> CopiedData
    {
        get
        {
            if (this.ViewState["CopiedData"] == null)
            {
                this.ViewState["CopiedData"] = new List<Row>();
            }

            return this.ViewState["CopiedData"] as List<Row>;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        e.InputParameters[0] = User.Identity.Name;
    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName.Equals("Select"))
        {
            GridViewRow gvr = GridView1.Rows[Convert.ToInt32(e.CommandArgument)];
            int id = Convert.ToInt32(GridView1.DataKeys[gvr.RowIndex]["Name"]);
            string character = gvr.Cells[0].Text;
            Row row = new Row { Id = id, Name = character };

            if (!this.CopiedData.Exists(r => r.Id == id))
            {
                this.CopiedData.Add(row);

                GridView2.DataSource = this.CopiedData;
                GridView2.DataBind();
            }
        }
    }


    [Serializable()]
    private class Row
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }



The issue I'm having is in this line of code:

int id = Convert.ToInt32(GridView1.DataKeys[gvr.RowIndex]["Name"]);
for it always retuns 0 to id, making the if (!this.CopiedData.Exists(r => r.Id == id)) always return false, so it do not update the code after the first line was selected.

Can anyone help me with this?

Thanks in advance and sorry about my poor english, its not my main language.

解决方案

I think first you take you grid view data to data table or data set then remove column which you don't want then bind that datatable to your second column.

Refer below link for how to do that:

http://stackoverflow.com/questions/785799/how-can-i-export-a-gridview-datasource-to-a-datatable-or-dataset[^]

how to get gridview data in dataset in asp.net[^]


这篇关于将数据从一个Gridview复制到另一个Gridview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆