Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am newbie in C# ASP.NET, my project consist of 2 GridViews , the first GridView displays data from SQL server, and it works fine. Now what I need to implement is that, when we select any row from gridView 1, the rows should be copied to GridView 2.

Below is my code:

protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection sc = new SqlConnection(@"Data Source=.sqlexpress;Initial Catalog=x;Integrated Security=True");
        sc.Open();
        SqlDataAdapter sd = new SqlDataAdapter("select * from BookDetails", sc);
        DataSet ds = new DataSet();
        sd.Fill(ds, "BookDetails");
        sc.Close();
        GridView1.DataSource = ds;
        GridView1.DataBind();
    }


 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
         foreach (GridViewRow row in GridView1.Rows)
        {
            GridView.Rows.Add(row);
            GridView.Rows.Remove(row);
        }
    }

GridView.Rows.Add(row); //error GridView.Rows.Remove(row); //error displays the values of data source in a table in each column represents a field and each row represents a record

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
167 views
Welcome To Ask or Share your Answers For Others

1 Answer

Use this it may helps you.

<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="gridView1" runat="server">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkSelect" runat="server" />
                        <asp:HiddenField ID="hdValue" runat="server" Value='<%#Eval("ID") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </div>
    <div>
        <asp:Button ID="btnMove" runat="server" Text="Move" OnClick="btnMove_Click" />
    </div>
    <div>
        <asp:GridView ID="gridView2" runat="server">
        </asp:GridView>
    </div>
    </form>
</body>

c# code

private void BindGridView()
    {
        if (Session[key] == null)
        {
            gridView1.DataSource = GetDataSource();
            gridView1.DataBind();
        }
        else
        {
            gridView1.DataSource = (DataTable)Session[key];
            gridView1.DataBind();
        }

    }

protected DataTable GetDataSource()
    {
        try
        {
            DataTable dt = new DataTable();
            dt = new DataTable();
            dt.Columns.Add("ID", typeof(int)).AutoIncrement = true;
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            DataColumn[] keys = new DataColumn[2];
            keys[0] = dt.Columns["ID"];
            dt.PrimaryKey = keys;
            dt.Rows.Add("1", "first object", 34);
            dt.Rows.Add("2", "second object", 24);
            dt.Rows.Add("3", "third object", 34);
            dt.Rows.Add("4", "fourth object", 24);
            dt.Rows.Add("5", "fifth object", 34);

            Session[key] = dt;
            return dt;
        }
        catch
        {
            return null;
        }
    }

protected void btnMove_Click(object sender, EventArgs e)
    {
        try
        {
            DataTable dtMain = Session[key] as DataTable;
            //copy the schema of source table
            DataTable dtClone = dtMain.Clone();
            foreach (GridViewRow gv in gridView1.Rows)
            {
                CheckBox chk = gv.FindControl("chkSelect") as CheckBox;
                HiddenField hdValue = gv.FindControl("hdValue") as HiddenField;
                if (chk.Checked)
                {
                    //get only the rows you want
                    DataRow[] results = dtMain.Select("ID=" + hdValue.Value + "");
                    //populate new destination table
                    foreach (DataRow dr in results)
                    {
                        dtClone.ImportRow(dr);
                    }
                }
                gridView2.DataSource = dtClone;
                gridView2.DataBind();
            }
        }
        catch
        {
            BindGridView();
        }

    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...