CommandArgument 中的 null return
null return in CommandArgument
我的CommandArgument
中没有数据return,我的.cs
中没有行命令代码
这是我的 .cs 代码
if(e.CommandName == "ApproveRow")
{
int index = Convert.ToInt32(e.CommandArgument);
//int index;
//bool check = int.TryParse(e.CommandName.ToString(), out index);
GridViewRow row = GridView1.Rows[index];
string ids = row.Cells[2].Text;
Utility u = new Utility();
string conn = u.connect();
SqlConnection connUser = new SqlConnection(conn);
SqlCommand read = connUser.CreateCommand();
string update = "UPDATE MosefTransaction SET TransStatus = 'Approved' where TransactionID = '" + ids + "'";
connUser.Open();
read.CommandText = update;
//read.Parameters.AddWithValue("@TransactionID", ids);
read.Parameters.Clear();
read.ExecuteNonQuery();
}
这是我的 aspx 代码:
<asp:TemplateField HeaderText="Transaction Number" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblmosID" runat="server" Text='<%#Bind ("TransactionID") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="30px" Font-Size="15px" Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Date" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblDate" runat="server" Text='<%#Bind ("DateFiled") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="130px" Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblName" runat="server" Text='<%#Bind ("ReqName") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Company" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblComp" runat="server" Text='<%#Bind ("ReqCompany") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Branch" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblBranch" runat="server" Text='<%#Bind ("ReqBranch") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names ="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Business Unit" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblBU" runat="server" Text='<%#Bind ("ReqBU") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Department" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblDept" runat="server" Text='<%#Bind ("ReqDept") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Section" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblsection" runat="server" Text='<%#Bind ("ReqSection") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Status" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblStatus" runat="server" Text='<%#Bind ("TransStatus") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:ButtonField ButtonType="Button" CommandName="ApproveRow" HeaderText="Approve" Text="Approve" ControlStyle-CssClass="btn btn-primary" HeaderStyle-ForeColor="White" HeaderStyle-Font-Names="Calibri" ItemStyle-Font-Names="Calibri"/>
我的错误在哪里?我尝试使用 BoundField
并且它有效,但我需要使用 Bind for my batch approve it 复选框。谢谢!
如果您使用 TemplateFields 和真实控件,则不能使用 Cell.Text
,因为它是 ""
。
您可以使用 GridViewRow.FindControl
:
Label lblmosID = (Label) row.FindControl("lblmosID");
string ids = lblmosID.Text;
但你真的应该使用 sql 参数而不是字符串连接:
string update = @"UPDATE MosefTransaction
SET TransStatus = 'Approved'
Where TransactionID = @TransactionID";
using(var updateCommand = new SqlCommand(update, connUser))
{
// presuming it's an int
updateCommand.Parameters.Add("@TransactionID", SqlDbType.Int).Value = int.Parse(lblmosID.Text);
connUser.Open();
int affected = updateCommand.ExecuteNonQuery();
}
首先,您没有将任何变量附加到您的命令
read.ExecuteNonQuery();
其次,ExecuteNonQuery returns 行数仅此而已。
我的CommandArgument
中没有数据return,我的.cs
这是我的 .cs 代码
if(e.CommandName == "ApproveRow")
{
int index = Convert.ToInt32(e.CommandArgument);
//int index;
//bool check = int.TryParse(e.CommandName.ToString(), out index);
GridViewRow row = GridView1.Rows[index];
string ids = row.Cells[2].Text;
Utility u = new Utility();
string conn = u.connect();
SqlConnection connUser = new SqlConnection(conn);
SqlCommand read = connUser.CreateCommand();
string update = "UPDATE MosefTransaction SET TransStatus = 'Approved' where TransactionID = '" + ids + "'";
connUser.Open();
read.CommandText = update;
//read.Parameters.AddWithValue("@TransactionID", ids);
read.Parameters.Clear();
read.ExecuteNonQuery();
}
这是我的 aspx 代码:
<asp:TemplateField HeaderText="Transaction Number" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblmosID" runat="server" Text='<%#Bind ("TransactionID") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="30px" Font-Size="15px" Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Date" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblDate" runat="server" Text='<%#Bind ("DateFiled") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="130px" Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblName" runat="server" Text='<%#Bind ("ReqName") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Company" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblComp" runat="server" Text='<%#Bind ("ReqCompany") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Branch" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblBranch" runat="server" Text='<%#Bind ("ReqBranch") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names ="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Business Unit" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblBU" runat="server" Text='<%#Bind ("ReqBU") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Department" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblDept" runat="server" Text='<%#Bind ("ReqDept") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Section" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblsection" runat="server" Text='<%#Bind ("ReqSection") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Status" HeaderStyle-ForeColor="White">
<ItemTemplate>
<asp:Label ID ="lblStatus" runat="server" Text='<%#Bind ("TransStatus") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Font-Names="Calibri" />
</asp:TemplateField>
<asp:ButtonField ButtonType="Button" CommandName="ApproveRow" HeaderText="Approve" Text="Approve" ControlStyle-CssClass="btn btn-primary" HeaderStyle-ForeColor="White" HeaderStyle-Font-Names="Calibri" ItemStyle-Font-Names="Calibri"/>
我的错误在哪里?我尝试使用 BoundField
并且它有效,但我需要使用 Bind for my batch approve it 复选框。谢谢!
如果您使用 TemplateFields 和真实控件,则不能使用 Cell.Text
,因为它是 ""
。
您可以使用 GridViewRow.FindControl
:
Label lblmosID = (Label) row.FindControl("lblmosID");
string ids = lblmosID.Text;
但你真的应该使用 sql 参数而不是字符串连接:
string update = @"UPDATE MosefTransaction
SET TransStatus = 'Approved'
Where TransactionID = @TransactionID";
using(var updateCommand = new SqlCommand(update, connUser))
{
// presuming it's an int
updateCommand.Parameters.Add("@TransactionID", SqlDbType.Int).Value = int.Parse(lblmosID.Text);
connUser.Open();
int affected = updateCommand.ExecuteNonQuery();
}
首先,您没有将任何变量附加到您的命令 read.ExecuteNonQuery();
其次,ExecuteNonQuery returns 行数仅此而已。