C# GridView删除行

C# GridView删除行,c#,gridview,datatable,C#,Gridview,Datatable,我正在尝试删除gridview中的一行(数据还没有在数据库中),因此它应该是一个简单的删除行,如果有人能为我指出正确的方向。。。。 这就是我所做的: else if (e.CommandName == "DeletePart") { int index = Convert.ToInt32(e.CommandArgument); //#1 line GridView1.DeleteRow(index); //#2 line } 我收到的

我正在尝试删除gridview中的一行(数据还没有在数据库中),因此它应该是一个简单的删除行,如果有人能为我指出正确的方向。。。。 这就是我所做的:

     else if (e.CommandName == "DeletePart")
    {
        int index = Convert.ToInt32(e.CommandArgument); //#1 line
        GridView1.DeleteRow(index);  //#2 line
    }
我收到的错误是:“输入字符串的格式不正确。”(这发生在#1行)

这就是gridview的外观:(使用链接按钮进行删除)


gridview如何填充和绑定的类:

     public int companyID = 0;
public int methodID = 0;
DataTable dt;
#region SQLConnections

string connectionString = ConfigurationManager.ConnectionStrings["SOSConnectionString"].ConnectionString;
SqlConnection conn;
#endregion

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        dt = new DataTable();
        MakeDataTable();
        EmptyDataString();
    }
    else
    {
        dt = (DataTable)ViewState["DataTable"];
    }
    ViewState["DataTable"] = dt; 

}

#region GridView

private void EmptyDataString()
{
    TemplateBuilder tmpEmptyDataTemplate = new TemplateBuilder();
    tmpEmptyDataTemplate.AppendLiteralString("No parts has been added to the model, please add a part.");
    GridView1.EmptyDataTemplate = tmpEmptyDataTemplate;
    GridView1.DataBind();
}

private void MakeDataTable()
{
    dt.Columns.Add("Item");
    dt.Columns.Add("Quantity");
    dt.Columns.Add("Price P/Quantity");
}

private void AddToDataTable()
{
    DataRow dr = dt.NewRow();
    dr["Item"] = txtPart.Text;
    dr["Quantity"] = numQuantity.Text;
    dr["Price P/Quantity"] = txtPricePQ.Text;
    dt.Rows.Add(dr);
}

private void BindGrid()
{
    GridView1.DataSource = dt;
    GridView1.DataBind();
}

protected void btnAddPart_Click(object sender, EventArgs e)
{
    AddToDataTable();
    BindGrid();
    ClearNewParts();
}
#endregion

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Edit")
    { 
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
            txtPart.Text = row.Cells[2].Text;
            numQuantity.Text = row.Cells[3].Text;
            txtPricePQ.Text = row.Cells[4].Text;
        }
    }
    else if (e.CommandName == "DeletePart")
    {
        //int iCount = GridView1.Rows.Count;
        //for (int i = 1; i <= iCount; i++)
        //{
        //    GridView1.DeleteRow(i);
        //}
      //  int rowIndex = Convert.ToInt32(GridView1.SelectedRow);

        int index = Convert.ToInt32(e.CommandArgument);
        GridView1.DeleteRow(index);

        //int index = Convert.ToInt32(e.CommandArgument);
        //GridView1.DeleteRow(rowIndex);
    }


    GridView1.DataBind();
}
public int companyID=0;
公共int methodID=0;
数据表dt;
#区域SQLConnections
string connectionString=ConfigurationManager.connectionString[“SOSConnectionString”]。connectionString;
SqlConnection-conn;
#端区
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
dt=新数据表();
MakeDataTable();
EmptyDataString();
}
其他的
{
dt=(数据表)视图状态[“数据表”];
}
视图状态[“数据表”]=dt;
}
#区域网格视图
私有void EmptyDataString()
{
TemplateBuilder tmpEmptyDataTemplate=新建TemplateBuilder();
AppendLiteralString(“尚未向模型添加任何部件,请添加部件”);
GridView1.EmptyDataTemplate=tmpEmptyDataTemplate;
GridView1.DataBind();
}
私有void MakeDataTable()
{
dt.列。添加(“项目”);
dt.列。添加(“数量”);
dt.栏添加(“价格/数量”);
}
私有void AddToDataTable()
{
DataRow dr=dt.NewRow();
dr[“Item”]=txtPart.Text;
dr[“数量”]=numQuantity.Text;
dr[“价格/数量”]=txtPricePQ.Text;
dt.Rows.Add(dr);
}
私有void BindGrid()
{
GridView1.DataSource=dt;
GridView1.DataBind();
}
受保护的void btnadpart单击(对象发送器,EventArgs e)
{
AddToDataTable();
BindGrid();
ClearNewParts();
}
#端区
受保护的void GridView1_row命令(对象发送方,GridViewCommandEventArgs e)
{
如果(例如,CommandName==“编辑”)
{ 
对于(int i=0;i//对于(int i=1;itry int.TryParse,这将解决输入字符串fromat的问题,但为什么需要检查正在设置的CommandArgument呢

else if (e.CommandName == "DeletePart")
{
    int index =-1;
    if(int.TryParse(e.CommandArgument,out index)) //#1 line
        GridView1.DeleteRow(index);  //#2 line
}

尝试int.TryParse,这将解决输入字符串fromat的问题,但为什么需要检查正在设置的CommandArgument呢

else if (e.CommandName == "DeletePart")
{
    int index =-1;
    if(int.TryParse(e.CommandArgument,out index)) //#1 line
        GridView1.DeleteRow(index);  //#2 line
}
似乎您没有在
GridView
中提到
CommandArgument
属性


添加
命令参数
,如上所示

似乎您没有在
GridView
中提到
CommandArgument
属性


添加
命令参数
,如上所示

试试这个

在ASPX中

<asp:GridView runat="server" ID="Gridview1" CommandName="delete" CommandArgument='<%#Container.DataItem.Index %>'/>
else if (e.CommandName == "DeletePart")
{
    int index = Convert.ToInt32(e.CommandArgument); 
    GridView1.DeleteRow(index);
}
试试这个

在ASPX中

<asp:GridView runat="server" ID="Gridview1" CommandName="delete" CommandArgument='<%#Container.DataItem.Index %>'/>
else if (e.CommandName == "DeletePart")
{
    int index = Convert.ToInt32(e.CommandArgument); 
    GridView1.DeleteRow(index);
}

找到解决方案,只需执行数据绑定…以下是工作代码:

    else if (e.CommandName == "Delete")
    {     
        int index = Convert.ToInt32(e.CommandArgument);
        GridView1.DeleteRow(index);
        ((DataTable)ViewState["DataTable"]).Rows[index].Delete();
        ((DataTable)ViewState["DataTable"]).AcceptChanges();
        GridView1.DataSource = (DataTable)ViewState["Data"];
        GridView1.DataBind();
    }

找到解决方案,只需执行数据绑定…以下是工作代码:

    else if (e.CommandName == "Delete")
    {     
        int index = Convert.ToInt32(e.CommandArgument);
        GridView1.DeleteRow(index);
        ((DataTable)ViewState["DataTable"]).Rows[index].Delete();
        ((DataTable)ViewState["DataTable"]).AcceptChanges();
        GridView1.DataSource = (DataTable)ViewState["Data"];
        GridView1.DataBind();
    }
This:)
然后,代码behinde:
受保护的子GridView1_行删除(ByVal sender作为对象,ByVal e作为System.Web.UI.WebControl.GridViewDeleteEventArgs)处理GridView1.RowDeleteing
DirectCast(ViewState(“CurrentDataReference”)、DataTable.Rows.RemoveAt(e.RowIndex)
GridView1.DataSource=DirectCast(ViewState(“CurrentDataReference”),DataTable)
GridView1.DataBind()
端接头
This:)
然后,代码behinde:
受保护的子GridView1_行删除(ByVal sender作为对象,ByVal e作为System.Web.UI.WebControl.GridViewDeleteEventArgs)处理GridView1.RowDeleteing
DirectCast(ViewState(“CurrentDataReference”)、DataTable.Rows.RemoveAt(e.RowIndex)
GridView1.DataSource=DirectCast(ViewState(“CurrentDataReference”),DataTable)
GridView1.DataBind()
端接头

您能调试它并显示e.CommandArgument的值吗?它在该特定行上断开,如果我查看该值,它只给出以下值“”…是否有其他方法删除行?您是否尝试过
GridView1。选择了索引
以获取已删除行的索引?@user2042152数据绑定在哪里。检查此项:您是否可以调试它并显示e.CommandArgument的值?它在该特定行上断开,如果我查看该值,它仅给出此项“”…是否有其他方法删除行?您是否尝试过
GridView1.选择了索引
以获取已删除行的索引?@user2042152数据绑定的位置..检查此项:e.CommandArgument将始终为空,因为他刚刚创建了行。我正在展示正确的解析方法,实际的问题存在于我已经知道的其他地方此方法得到另一个错误:“与'int.TryParse(string,out int)'匹配的最佳重载方法具有一些无效参数”,我尝试获取CommandArgument的原因是我需要获取