如何在c#中没有SqlDataSource的情况下删除gridview中的行?

时间:2011-06-03 09:06:19

标签: c# asp.net gridview row

我的作业是在ASP.NET中,我的教授希望我删除gridview中不使用SqlDataSource的行。这可能吗?因为我认为我的教授想要让我失望只是因为我问了一个问题并且他无法回答。

3 个答案:

答案 0 :(得分:0)

我只想删除行找到行索引并简单地调用方法

datagridview.rows.removeat(rowindex);

答案 1 :(得分:0)

是的,您可以从gridview中删除不使用sqldatasource的行。您所要做的就是从源中删除行(无论源是什么......),它绑定到您的gridview。

这是该问题的示例代码:

public static DataTable dt;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            dt = new DataTable();
            DataRow dr = null;
            dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
            dt.Columns.Add(new DataColumn("Column1", typeof(string)));
            dt.Columns.Add(new DataColumn("Column2", typeof(string)));         
            dr = dt.NewRow();
            dr["RowNumber"] = 1;
            dr["Column1"] = "column1cell";
            dr["Column2"] = "column2cell";
            dt.Rows.Add(dr);
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        if (dt.Rows.Count > 0)
        {
            dt.Rows.RemoveAt(0);
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }

不是最好的代码,但如果你的教授想要你做,那么你就是。 希望这可以帮助你...

答案 2 :(得分:0)

有一种更好的方法,无需重新绑定Gridview并强制拨打SqlDataSource

使用ViewState

加载Gridview时,保存"数据"到ViewState变量。

即:

//ok let's load the gridview with data as normal and display it
//'sdsClasses' is the SQL data source
gvStudents.DataSourceID = "sdsClasses";
gvStudents.DataSource = null; // Null out the source, as we have a SourceID instead
gvStudents.DataBind(); //load the gridview and display it

//save the data in a viewstate for later use 
DataView dvClasses = (DataView)sdsClasses.Select(DataSourceSelectArguments.Empty);
DataTable dt = new DataTable();
if (dv != null)
{
    dt = dvClasses.ToTable();
    ViewState["gv"] = dt;
}

所以现在当Gridview加载时,你将数据在内存中用作ViewState。

如果您需要删除一行,请执行此操作...

在我的示例中,我使用搜索功能根据下拉列表控件中的SelectValue查找要删除的行。您必须使用类似的东西来指向要删除的行。如果你想删除最后一行,那么在DataTable上逐行执行ForEach,直到你到达最后一行并删除!

    //Load the dataview that was already saved in the ViewState
    DataTable dt = (DataTable)ViewState["gv"];

    //find the student in the datatable, row by row
    bool found = false;
    bool wsAtt = false; //flag to indicate if the student is already in the roll or not saved yet (ie: sdsClasses recordset)
    foreach (DataRow dr in dt.Rows)
    {
        //compare studentID in the datatable with the selected value of the student to delete
        //check that the field has TECNQ studentIDs otherwise use the 2nd cell in the row
        if (dr[0].ToString().Contains("NQ"))
            found = (found || dr[0].ToString() == ddlRemoveStudents.SelectedValue);
        else
        {
            found = (found || dr[1].ToString() == ddlRemoveStudents.SelectedValue);
            wsAtt = true;
        }

        //he should!
        if (found)
        {
            //remove the row to the datatable
            dt.Rows.Remove(dr);

            //Bind the grid view to the datatable and refresh
            gvStudents.DataSource = dt;
            gvStudents.DataSourceID = null; // Null out the id, we have a source
            gvStudents.DataBind();

            //update the viewstate with the new amount of rows
            ViewState["gv"] = dt;
        }
    }

所以你可以看到,使用ViewState作为SqlDataSource的替代品,你可以按照自己的意愿操作Gridview,并且永远不会再次调用原始的SqlDataSource,除了第一次获取数据。

告诉你的教授他是一只傲慢的猪。