【问题标题】:how to enable selected row in gridview in asp .net and c#如何在asp .net和c#中启用gridview中的选定行
【发布时间】:2015-11-02 10:32:19
【问题描述】:

这是我的 aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="ID" DataSourceID="SqlDataSource1" 
        OnRowCommand="GridView1_RowCommand" AutoGenerateSelectButton="True" EnablePersistedSelection="True">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="ID" />
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:BoundField DataField="Class" HeaderText="Class" SortExpression="Class" />
            <asp:BoundField DataField="Section" HeaderText="Section" 
                SortExpression="Section" />
            <asp:BoundField DataField="Address" HeaderText="Address" 
                SortExpression="Address" />
            <asp:TemplateField HeaderText="Edit">
               <ItemTemplate>
                 <asp:Button runat="server" ID="btnedit" Text="Edit" CommandName="EditRow"></asp:Button>                    
               </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="Delete">
          <ItemTemplate>
                 <asp:Button runat="server" ID="btndelete" Text="Delete" CommandArgument='<%# Container.DataItemIndex %>' CommandName="Deleterow"></asp:Button>                    
               </ItemTemplate>
          </asp:TemplateField>            
        </Columns>
    </asp:GridView>

下面是代码:

protected void btnsub_Click(object sender, EventArgs e)
        {
            SqlConnection con = Connection.DBconnection();
            if (Textid.Text.Trim().Length > 0)
            {

                SqlCommand com = new SqlCommand("StoredProcedure3", con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.AddWithValue("@id", Textid.Text.Trim());
                com.Parameters.AddWithValue("@Name", Textusername.Text.Trim());
                com.Parameters.AddWithValue("@Class", Textclass.Text.Trim());
                com.Parameters.AddWithValue("@Section", Textsection.Text.Trim());
                com.Parameters.AddWithValue("@address", Textaddress.Text.Trim());
                com.ExecuteNonQuery();
                GridViewRow gr = GridView1.SelectedRow;
                gr.Cells[1].Text = Textusername.Text;
                gr.Cells[2].Text = Textclass.Text;
                gr.Cells[3].Text = Textsection.Text;
                gr.Cells[4].Text = Textaddress.Text;

            }
            else
            {
                SqlCommand com = new SqlCommand("StoredProcedure1", con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.AddWithValue("@Name", Textusername.Text.Trim());
                com.Parameters.AddWithValue("@Class", Textclass.Text.Trim());
                com.Parameters.AddWithValue("@Section", Textsection.Text.Trim());
                com.Parameters.AddWithValue("@address", Textaddress.Text.Trim());
                com.ExecuteNonQuery();
                Response.Redirect("studententry.aspx");
            }
        }

所选行未在 gridview 中选择。我可以知道如何启用 gridview 行。我使用了 msdn 和其他文档,然后我跟着,但没有任何帮助。

我设计我设置了启用选择,但我仍然没有发现问题。

谁能帮帮我?

谢谢,

【问题讨论】:

  • 您可以将 selectedrowindex 保存在变量中,然后在 btnsub_Click 中使用,例如 GridView1.Rows[index_varable].Cells[1].Text = Textusername.Text;
  • 监控SelectedIndexChangedSelectedIndexChanging 事件,用于SelectedRowNewSelectedIndex。还要检查您没有在任何其他位置将 SelectedRow 设置为 Nothing/Null 或将 SelectedIndex 设置为 -1。还要确保在任何情况下访问SelectedRow 之前单击任何行的Select 命令,或者最好设置默认SelectedIndexsystem.web.ui.webcontrols.gridview.selectedindex
  • @RojalinSahoo:你能详细说明一下吗?...

标签: c# asp.net gridview


【解决方案1】:

基本上,我们会在某些 GridviewRow 操作事件(如 OnSelectedIndexChangedOnSelectedIndexChangingOnRowEditing 或来自模板控件(如 Button)单击时)获得 GridView 的 SelectedRow。但是在您的编码中,我认为您的 btnsub_Click 不在 Gridview 内,因此如果您想在 GridviewRow Action 事件之后使用 SelectedGridViewRow,则将索引保存在某个临时变量中或将变量作为参数传递给方法。

protected void GridView1_SelectedIndexChanged(Object sender, EventArgs e)
  {
    int index = Gridview1.SelectedIndex;
    hiddenfield.Value = index.ToString();
  }

在 OnRowEditing 中也可以获取行的索引

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "EditRow")
            {
                GridViewRow gr = (GridViewRow)((Button)e.CommandSource).NamingContainer;
                int index = gr.RowIndex;
                hidval.Value = index.ToString();
            }
        }

点击按钮可以获取隐藏字段值作为索引:

protected void btnsub_Click(object sender, EventArgs e)
        {
            SqlConnection con = Connection.DBconnection();
            if (Textid.Text.Trim().Length > 0)
            {
                SqlCommand com = new SqlCommand("StoredProcedure3", con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.AddWithValue("@id", Textid.Text.Trim());
                com.Parameters.AddWithValue("@Name", Textusername.Text.Trim());
                com.Parameters.AddWithValue("@Class", Textclass.Text.Trim());
                com.Parameters.AddWithValue("@Section", Textsection.Text.Trim());
                com.Parameters.AddWithValue("@address", Textaddress.Text.Trim());
                com.ExecuteNonQuery();
                if(!String.IsNullOrEmpty(hiddenfield.Value))
                {
                int index = Convert.ToInt16(hiddenfield.Value);
                GridView1.Rows[index].Cells[1].Text = Textusername.Text;
                GridView1.Rows[index].Cells[2].Text = Textclass.Text;
                GridView1.Rows[index].Cells[3].Text = Textsection.Text;
                GridView1.Rows[index].Cells[4].Text = Textaddress.Text;
                }

            }
            else
            {
                SqlCommand com = new SqlCommand("StoredProcedure1", con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.AddWithValue("@Name", Textusername.Text.Trim());
                com.Parameters.AddWithValue("@Class", Textclass.Text.Trim());
                com.Parameters.AddWithValue("@Section", Textsection.Text.Trim());
                com.Parameters.AddWithValue("@address", Textaddress.Text.Trim());
                com.ExecuteNonQuery();
                Response.Redirect("studententry.aspx");
            }
        } 

【讨论】:

  • 我的问题是,当我选择行时,它会被选中,但是当我编辑行时,它没有被选中..
  • 当 select-> edit->submit 时,它工作正常,并且所选行工作正常.. 但是 edit->submit ,它不起作用..
  • 如果是编辑 --> 提交则仅使用 OnRowEditting 代码块,我还提到了如何获取已编辑行的索引。
  • 好的。在该代码中受保护的 void GridView1_SelectedIndexChanged(Object sender, EventArgs e) { int index = Gridview1.SelectedIndex; hiddenfield.Value = index.ToString(); } .. gridview1 在当前上下文中不存在..
  • 检查你的GridView的ID是否正确?可能是 GridView1 protected void GridView1_SelectedIndexChanged(Object sender, EventArgs e) { int index = GridView1.SelectedIndex; hiddenfield.Value = index.ToString(); }
猜你喜欢
  • 2021-05-13
  • 2022-11-03
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2013-12-15
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多