C# 从网格视图捕获多个值以传递给存储过程

C# 从网格视图捕获多个值以传递给存储过程,c#,asp.net,gridview,parameter-passing,C#,Asp.net,Gridview,Parameter Passing,net与C# 这里是gridview控件中的列 当用户单击任一按钮时,我需要将CaseID、CaseworkerID、EventDate和Code的值传递给存储过程 但是如何将多个参数传递给onclick方法呢 <columns> <asp:BoundField DataField="CaseID" HeaderText="CaseID" Visible = "False" /> <asp:BoundField DataField="caseworkerID" He

net与C#

这里是gridview控件中的列

当用户单击任一按钮时,我需要将CaseID、CaseworkerID、EventDate和Code的值传递给存储过程

但是如何将多个参数传递给onclick方法呢

<columns>
<asp:BoundField DataField="CaseID" HeaderText="CaseID" Visible = "False" />
<asp:BoundField DataField="caseworkerID" HeaderText="CwID" Visible = "False" />
<asp:BoundField DataField="CaseWorker" HeaderText="Case Worker" />
<asp:BoundField DataField="EventDate" HeaderText="Event Date" />
<asp:BoundField DataField="Code" HeaderText="Code" />
  <asp:TemplateField HeaderText="ADD">
       <ItemTemplate> 
                    <asp:Button  ID="AddUnit" runat="server" Text=" +1 " onserverclick="AddUnit_Click"/>
        </ItemTemplate> 
   </asp:TemplateField> 

<asp:BoundField DataField="TotalUnits" HeaderText="Total Units" />

  <asp:TemplateField HeaderText="DDT">
       <ItemTemplate> 
          <asp:Button ID="DdtUnit" runat="server" Text=" -1 " onserverclick="DdtUnit_Click"/>
        </ItemTemplate> 
   </asp:TemplateField> 


<asp:BoundField DataField="EventType" HeaderText="Event Type" />
<asp:BoundField DataField="UnitCost" HeaderText="Unit Cost" />
<asp:BoundField DataField="TotalCost" HeaderText="Total Cost"/>

编辑: 所以我现在有了这个

            <ItemTemplate> 
                <asp:Button  ID="AddUnit" runat="server" Text=" +1 " 
                CommandName="AddUnit" 
                CommandArgument='<%# Eval("CaseID")+ ";" + Eval("caseworkerID")+ ";" + Eval("EventDate")+ ";" + Eval("Code")%>'/>
            </ItemTemplate> 


这是一个很好的开始

您要做的就是创建一个由特殊字符删除的commandargument。处理事件时,从事件(e)中取出命令参数并拆分它。(如utkarshs答案所示,使用gridviews行命令事件,而不是onclick)

如果commandargument数据实际上包含与您用于清除器的字符相同的字符,则可能会导致问题。不过,只有一个建议(当我们知道像productId这样的东西不包含管道(|)时,我们有时会这样做)

编辑: 所以你的按钮应该是

  <asp:button CommandArgument='<%# Eval("someValue") + " | " 
              + Eval("someOtherValue") + " | " %>'  
             CommandName="whatever" runat="server" text="FOO BAR" />

首先,对网格的所有按钮使用不同的commandname

protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    string city="";
    if (e.CommandName == "btnname")
    {
        ImageButton imgbtn = (ImageButton)e.CommandSource;
        GridViewRow rows = (GridViewRow)imgbtn.NamingContainer;
        city = grid.Rows[rows.RowIndex].Cells[1].Text;           
    }

}
根据您的要求使用列的单元格id。列id从0开始


有任何疑问请问我

嗨!你应该查看按钮的
commandargument
commandname
属性是的,我刚才说我记不起写答案时的名字了,brain fart;)好的,我们有一个事件处理程序,而不是一个点击事件,@Sonny123是的,因为每一行在gridview中都有自己的按钮,您要像Utkarsh一样处理gridview“RowCommand”处理程序。但是,请使用e.CommandArgument并在除沫器上拆分它。然后,您可以通过单击按钮传递任意多个值。你只需要动态地构建它们。请参阅editim,但编译器说CommandArgument是一个对象(不是字符串),所以没有可拆分的方法。。但是我想到了制作一个数组。另外,如果Eval(“someValue”)得到一个字符串值,Eval(someValue)会得到一个整数吗?还是最好将all作为字符串传递,然后在后面的代码中强制转换它?@Sony123是的,很抱歉,内存不足。刚刚打开VS来处理它。稍后在代码隐藏中强制转换它,因为您仍然需要.ToString()调用CommandArgument并将其强制转换回e.CommandArgument.ToString().Split(新字符[]{“;”});我最终会得到语法!!现在我是一只快乐的兔子!谢谢你的帮助
protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    string city="";
    if (e.CommandName == "btnname")
    {
        ImageButton imgbtn = (ImageButton)e.CommandSource;
        GridViewRow rows = (GridViewRow)imgbtn.NamingContainer;
        city = grid.Rows[rows.RowIndex].Cells[1].Text;           
    }

}