2012-07-25 64 views
0

我创建了一个网格视图应用程序,并在我的模板之外我有一个添加新行按钮。当我添加一个新行时,它会被放入一个编辑和删除按钮。我想要做的是当我点击添加新行按钮时,我希望它在编辑模式下打开新行,因此不能添加空白行的空白信息。所以基本上如果我添加一个新的行,并不输入信息它不会被创建。避免添加空白的新行

如果我需要更详细的解释我的问题,请询问。

任何帮助将不胜感激。

谢谢

+0

这是什么平台 - Web,Winforms或WPF?更重要的是,到目前为止你尝试过了什么?你的问题并不意味着你在解决这个问题方面付出很多努力,这通常不会得到太多回应。 – 2012-07-25 15:27:58

+0

这是一个Web应用程序。 – KKP 2012-07-25 15:29:38

+0

@MichaelYounani - 你只需要新添加的行的索引并设置EditIndex属性,参见我的答案。 – JonH 2012-07-25 15:55:36

回答

0

我最终找出我自己的问题。它现在工作完美。我也改变了数据库,但我提供了我的代码。我确定有一个更简单的方法,但这是我能做的最好的:如果你们能以更简单的方式提供输入,我将不胜感激。

protected void gv_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 

     if (e.CommandName == "Insert") //- this is needed to explain that the INSERT command will only work when INSERT is clicked 
     { 
      gv.DataBind(); 

      DataTable d = dbcon.GetDataTable("SELECT * FROM CIS.CIS_TRANS ORDER BY ID DESC", "ProjectCISConnectionString"); 

      string transCode = "", fundCode = "", BSA_CD = "", DP_TYPE = ""; 

      if (d.Rows.Count > 0) 
      { 
       transCode = d.Rows[0]["TRANS_CD"].ToString(); 
       fundCode = d.Rows[0]["FUND_CD"].ToString(); 
       BSA_CD = d.Rows[0]["BSA_CD"].ToString(); 
       DP_TYPE = d.Rows[0]["DP_TYPE"].ToString(); 

       if (transCode.Trim().Length > 0) 
       { 
        dbcon.Execute("INSERT INTO CIS.CIS_TRANS (TRANS_CD) VALUES('')", "ProjectCISConnectionString"); 

        gv.DataBind(); 
       } 
      } 

      gv.EditIndex = gv.Rows.Count - 1; 

     } 
     else if (e.CommandName == "Cancel") 
     { 
      DataTable d = dbcon.GetDataTable("SELECT * FROM CIS.CIS_TRANS ORDER BY ID DESC", "ProjectCISConnectionString"); 

      string transCode = ""; 

      if (d.Rows.Count > 0) 
      { 
       transCode = d.Rows[0]["TRANS_CD"].ToString(); 

       if (transCode.Trim().Length == 0) 
       { 
        dbcon.Execute(string.Format("DELETE CIS.CIS_TRANS WHERE ID = '{0}'", d.Rows[0]["ID"]), "ProjectCISConnectionString"); 

        gv.DataBind(); 
       } 
      } 


     } 
    } 
-3

这是相当简单的,一旦你添加一行:

您需要设置新添加的行的编辑指数:

gv.EditIndex = gv.Rows.Count-1;

编辑为OP

这是肮脏的代码,我只是告诉你我的意思,并相当快速地把它掀起来。 假设一个在网页上呼吁GridView1 GridView控件:

namespace HelpSO3 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     List<string> t = new List<string>(); 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       string s = "hi"; 
       t.Add(s); 
       GridView1.DataSource = t; 
       GridView1.DataBind(); 
       Session["MyList"] = t; 
      } 
     } 

     protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
     { 

     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      t = (List<string>)Session["MyList"]; 
      t.Add("Another String"); 
      GridView1.DataSource = t; 
      GridView1.DataBind(); 
      GridView1.EditIndex = GridView1.Rows.Count - 1; 
      GridView1.DataBind(); 
      Session["MyList"] = t; 
     } 
    } 
} 

所以Button1_Click事件增加了一个新行值“另一个字符串”然后我们绑定网格视图和EditIndex值设置为最新的行和重新绑定。它很简单。

你的情况,你的代码将变成:

protected void gv_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Insert") //- this is needed to explain that the INSERT command will only work when INSERT is clicked 
     { 
      dbcon.Execute("INSERT INTO PROJ_ASP (TRANS_CD) VALUES('')", "ProjectASPConnectionString"); 

      gv.DataBind(); 
      gv.EditIndex = gv.Rows.Count-1; 
      gv.DataBind(); 
     } 

    } 
+0

该代码放置在哪里? – KKP 2012-07-25 16:01:02

+0

@MichaelYounani我假设你有某种添加新行的方法是正确的?一旦你添加新行(我假设你正在添加到gridview的底部是正确的?)如果是的话,那么你将gridview的编辑索引设置为行数-1(因为索引是基于0的)。所以你可以在添加新行的事件之后添加这段代码。 – JonH 2012-07-25 16:05:50

+0

是的新行被放置在网格视图的底部。你可以看到我在上面的应用程序中添加了一个新的行代码,对于如何放置它我仍然有点困惑。我没有基于零。 – KKP 2012-07-25 16:11:55