C# 在一个链接按钮上绑定2个eval
我正在寻找一种方法,让我的两个评估在我的CS。第一根弦很好用,但另一根不行 这是我的aspxC# 在一个链接按钮上绑定2个eval,c#,asp.net,C#,Asp.net,我正在寻找一种方法,让我的两个评估在我的CS。第一根弦很好用,但另一根不行 这是我的aspx <asp:ListView ID="lvMaterialsList" runat="server" ondatabound="lvMaterialsList_DataBound" onpagepropertieschanging="lvMaterialsList_PagePropertiesChanging" OnItemCommand="lvMateri
<asp:ListView ID="lvMaterialsList" runat="server" ondatabound="lvMaterialsList_DataBound"
onpagepropertieschanging="lvMaterialsList_PagePropertiesChanging" OnItemCommand="lvMaterialsList_ItemCommand">
<ItemTemplate>
<tr>
<td>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("SupplierProduct")%> ' Visible="false" /></td>
<td>
<td>
<asp:Label ID="ltRefNo" runat="server" Text='<%# Eval("ReqMatID") %>' Visible="false" />
<%# Eval("SupplierProduct")%>
</td>
<td>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("SupplierProductID") %>' width="1px" Visible="false" />
</td>
<td><%# Eval("Quantity") %></td>
<td><asp:TextBox ID="txtAlloted" runat="server" type="number" Text=''
class="form-control" width="60px" min='1'/></td>
<td><asp:LinkButton ID="btnUpdate" runat="server" OnClientClick='return confirm("Withdraw materials?")' CommandName="updateused">
<i class="fa fa-refresh"></i> </asp:LinkButton>
</td>
<td><asp:Literal ID="ltUsed" runat="server" Text='<%# Eval("Used") %>'
Visible="false" />
<%# Eval("Used")%>
</td>
<td><%# Eval("Status") %></td>
<td><%# Eval("DateAdded", "{0: MMMM dd, yyyy}") %></td>
<td><%# Eval("DateModified", "{0: MMMM dd, yyyy}") %></td>
<td>
<td>
<asp:LinkButton Text="Additional" class="btn btn-primary " ID="lbtnUpdate" runat="server" CommandArgument='<%#Eval("ProjectID")+","+ Eval("ReqMatID")%>'
PostBackUrl='<%# string.Format(" AdditionalAlloc.aspx?ID={0}&MID={1}", Eval("ProjectID"), Eval("ReqMatID"))%>'></asp:LinkButton>
<asp:LinkButton Text="Add req" class="btn btn-primary " ID="lblAdd" runat="server"
PostBackUrl='<%# string.Format(" AddReq.aspx?ID={0}", Eval("ProjectID"))%>'></asp:LinkButton>
<a href='EditMaterial.aspx?ID=<%# Eval("ReqMatID") %>'><i class="fa fa-pencil"></i></a>
<%-- <a href='../Reports/SupplierDetails.aspx?ID=<%# Eval("SupplierID") %>'><i class="fa fa-print"></i></a> --%>
<a href='DeleteMaterial.aspx?ID=<%# Eval("ReqMatID") %>'" onclick='return confirm("Delete record?")'>
<i class="fa fa-trash-o"></i>
</a>
</td>
</tr>
</ItemTemplate>
<EmptyDataTemplate>
<tr>
<td colspan="12"><h2 class="text-center">No records found.</h2></td>
</td>
</tr>
</EmptyDataTemplate>
</asp:ListView>
}
这就是我使用listview的方式
protected void lvMaterialsList_ItemCommand(object sender, ListViewCommandEventArgs e)
{
Label ltRefNo = (Label)e.Item.FindControl("ltRefNo");
Label label1 = (Label)e.Item.FindControl("Label1");
Label label2 = (Label)e.Item.FindControl("Label2");
TextBox txtAlloted = (TextBox)e.Item.FindControl("txtAlloted");
Literal ltUsed = (Literal)e.Item.FindControl("ltUsed");
bool existingSupply = IsExisting();
bool hasquantity = HasInventory(label1.Text);
int alloted = Convert.ToInt32(txtAlloted.Text);
int productid = Convert.ToInt32(label1.Text);
string Label2 = label2.Text;
var inventory = new DataTable();
using (var da = new SqlDataAdapter("SELECT * FROM Inventory", con))
{
da.Fill(inventory);
}
var products = new DataTable();
using (var da = new SqlDataAdapter("SELECT * FROM SupplierProducts", con))
{
da.Fill(products);
}
if (e.CommandName == "updateused")
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
if (alloted < 0)
{
quantityCheck.Text = "cannot input negative number as quantity";
Panel1.Visible = true;
return;
}
int finalQuantity = Convert.ToInt32(inventory.Rows[0]["Quantity"]) - alloted;
int criticalLevel = Convert.ToInt32(products.Rows[0]["CriticalLevel"]);
bool isSafe = finalQuantity >= criticalLevel;
string status = String.Empty;
if (finalQuantity <= criticalLevel && finalQuantity != 0)
{
status = "Critical";
}
else if (finalQuantity > criticalLevel)
{
status = "Available";
}
else
{
status = "Unavailable";
}
if (existingSupply && hasquantity && isSafe)
{
cmd.CommandText = "UPDATE RequiredMaterials SET Used=Used + @Used, DateModified=@DateModified WHERE ReqMatID=@ReqMatID";
cmd.Parameters.AddWithValue("@Used", alloted);
cmd.Parameters.AddWithValue("@ReqMatID", ltRefNo.Text);
cmd.Parameters.AddWithValue("@DateModified", DateTime.Now);
cmd.ExecuteNonQuery();
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "UPDATE Inventory SET Quantity = Quantity - @Quantity, Status=@Status " +
"WHERE ProductID=@ProductID";
cmd.Parameters.AddWithValue("@Quantity", alloted);
cmd.Parameters.AddWithValue("@ProductID", productid);
cmd.Parameters.AddWithValue("@Status", status);
cmd.ExecuteNonQuery();
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO Withdraw VALUES (@ProjectID, @ProductID, @SupplierID, @Quantity,@UserID, @DateWithdrawn)";
cmd.Parameters.AddWithValue("@ProjectID", ddlProjects.SelectedValue);
cmd.Parameters.AddWithValue("@ProductID", productid);
cmd.Parameters.AddWithValue("@SupplierID", DBNull.Value );
cmd.Parameters.AddWithValue("@Quantity", alloted);
cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString());
cmd.Parameters.AddWithValue("@DateWithdrawn", DateTime.Now);
cmd.ExecuteNonQuery();
con.Close();
GetMaterialsList();
}
else if (!isSafe)
{
quantityCheck.Text = Label2 + @" Inventory count will be lower than the critical level.";
Panel1.Visible = true;
}
else
{
Panel1.Visible = true;
quantityCheck.Text = Label2 + " Cannot input inventory";
}
}
}
受保护的void lvMaterialsList\u ItemCommand(对象发送方,ListViewCommandEventArgs e)
{
Label ltRefNo=(Label)e.Item.FindControl(“ltRefNo”);
label1=(Label)e.Item.FindControl(“label1”);
label2=(Label)e.Item.FindControl(“label2”);
TextBox txtalocated=(TextBox)e.Item.FindControl(“txtalocated”);
Literal ltUsed=(Literal)e.Item.FindControl(“ltUsed”);
bool existingSupply=IsExisting();
bool hasquantity=HasInventory(label1.Text);
int allocated=Convert.ToInt32(txtalocated.Text);
int productid=Convert.ToInt32(label1.Text);
字符串Label2=Label2.Text;
var inventory=新数据表();
使用(var da=new-SqlDataAdapter(“从清单中选择*,con))
{
da.填写(库存);
}
var products=新数据表();
使用(var da=new-SqlDataAdapter(“从供应商产品中选择*,con))
{
da.填充物(产品);
}
如果(e.CommandName==“updateused”)
{
con.Open();
SqlCommand cmd=新的SqlCommand();
cmd.Connection=con;
如果(分配<0)
{
quantityCheck.Text=“不能输入负数作为数量”;
面板1.可见=真实;
返回;
}
int finalQuantity=Convert.ToInt32(inventory.Rows[0][“数量”])-已分配;
int criticalLevel=Convert.ToInt32(products.Rows[0][“criticalLevel]”);
bool isSafe=最终数量>=关键级别;
字符串状态=string.Empty;
if(最终数量关键级别)
{
status=“可用”;
}
其他的
{
status=“不可用”;
}
if(现有供应量、数量和安全性)
{
cmd.CommandText=“更新所需材料集使用=使用+@Used,DateModified=@DateModified,其中ReqMatID=@ReqMatID”;
cmd.Parameters.AddWithValue(“@Used”,已分配);
cmd.Parameters.AddWithValue(“@ReqMatID”,ltRefNo.Text);
cmd.Parameters.AddWithValue(“@DateModified”,DateTime.Now);
cmd.ExecuteNonQuery();
cmd=newsqlcommand();
cmd.Connection=con;
cmd.CommandText=“更新库存集数量=数量-@数量,状态=@状态”+
“其中ProductID=@ProductID”;
cmd.Parameters.AddWithValue(“数量”,已分配);
cmd.Parameters.AddWithValue(“@ProductID”,ProductID);
cmd.Parameters.AddWithValue(“@Status”,Status);
cmd.ExecuteNonQuery();
cmd=newsqlcommand();
cmd.Connection=con;
cmd.CommandText=“插入提取值(@ProjectID、@ProductID、@SupplierID、@Quantity、@UserID、@dateRetracted)”;
cmd.Parameters.AddWithValue(“@ProjectID”,ddlProjects.SelectedValue);
cmd.Parameters.AddWithValue(“@ProductID”,ProductID);
cmd.Parameters.AddWithValue(“@SupplierID”,DBNull.Value);
cmd.Parameters.AddWithValue(“数量”,已分配);
cmd.Parameters.AddWithValue(“@UserID”,Session[“UserID”].ToString());
cmd.Parameters.AddWithValue(“@DateRetracted”,DateTime.Now);
cmd.ExecuteNonQuery();
con.Close();
GetMaterialsList();
}
否则,如果(!isSafe)
{
quantityCheck.Text=Label2+@“库存盘点将低于临界水平。”;
面板1.可见=真实;
}
其他的
{
面板1.可见=真实;
quantityCheck.Text=Label2+“无法输入库存”;
}
}
}
我不断得到一个错误:
对象引用未设置为对象的实例
我已经调试了系统,它显示:
将nvarchar值“\uu Page”转换为数据类型int时,转换失败。因为表单本身上有
LinkButton
,而不在任何数据绑定控件内,所以当前代码将无法工作,因为Eval
方法只能与数据绑定控件一起使用。现在,我真的不确定您是如何让ProjectID
工作的。您应该始终避免使标记代码复杂化。如果您的代码隐藏文件中有所有内容,为什么要使事情复杂化?只需在代码隐藏文件中执行即可
标记(aspx页):-
由于表单本身上有
LinkButton
,而不在任何数据绑定控件内,因此当前代码将不起作用,因为Eval
方法只能与数据绑定控件一起使用。现在,我真的不确定您是如何让ProjectID
工作的。您应该始终避免使标记代码复杂化。如果您的代码隐藏文件中有所有内容,为什么要使事情复杂化?只需在代码隐藏文件中执行即可
标记(aspx页):-
出现错误时,请调试并检查行的位置。@KaushikMaheta。我已经调试了系统并编辑了question@gamered123,当您收到错误时,是哪一行?因为此错误是类型对话错误。为什么不使用like CommandArgument=''@KaushikMaheta。它没有具体说明,但它是inGetMaterials()。数据绑定当您得到错误时,请调试并检查行的位置。@KaushikMaheta。我已经调试了系统并编辑了question@gamered123,当您收到错误时,是哪一行?因为此错误是类型对话错误。为什么不使用like CommandArgument=''@KaushikMaheta。它没有具体说明,但它是inGetMaterials()。DatabindI只是把它放在一个databound控件中,但是我使用的代码仍然给出相同的结果errors@gamered123-哪个爸爸
protected void lvMaterialsList_ItemCommand(object sender, ListViewCommandEventArgs e)
{
Label ltRefNo = (Label)e.Item.FindControl("ltRefNo");
Label label1 = (Label)e.Item.FindControl("Label1");
Label label2 = (Label)e.Item.FindControl("Label2");
TextBox txtAlloted = (TextBox)e.Item.FindControl("txtAlloted");
Literal ltUsed = (Literal)e.Item.FindControl("ltUsed");
bool existingSupply = IsExisting();
bool hasquantity = HasInventory(label1.Text);
int alloted = Convert.ToInt32(txtAlloted.Text);
int productid = Convert.ToInt32(label1.Text);
string Label2 = label2.Text;
var inventory = new DataTable();
using (var da = new SqlDataAdapter("SELECT * FROM Inventory", con))
{
da.Fill(inventory);
}
var products = new DataTable();
using (var da = new SqlDataAdapter("SELECT * FROM SupplierProducts", con))
{
da.Fill(products);
}
if (e.CommandName == "updateused")
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
if (alloted < 0)
{
quantityCheck.Text = "cannot input negative number as quantity";
Panel1.Visible = true;
return;
}
int finalQuantity = Convert.ToInt32(inventory.Rows[0]["Quantity"]) - alloted;
int criticalLevel = Convert.ToInt32(products.Rows[0]["CriticalLevel"]);
bool isSafe = finalQuantity >= criticalLevel;
string status = String.Empty;
if (finalQuantity <= criticalLevel && finalQuantity != 0)
{
status = "Critical";
}
else if (finalQuantity > criticalLevel)
{
status = "Available";
}
else
{
status = "Unavailable";
}
if (existingSupply && hasquantity && isSafe)
{
cmd.CommandText = "UPDATE RequiredMaterials SET Used=Used + @Used, DateModified=@DateModified WHERE ReqMatID=@ReqMatID";
cmd.Parameters.AddWithValue("@Used", alloted);
cmd.Parameters.AddWithValue("@ReqMatID", ltRefNo.Text);
cmd.Parameters.AddWithValue("@DateModified", DateTime.Now);
cmd.ExecuteNonQuery();
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "UPDATE Inventory SET Quantity = Quantity - @Quantity, Status=@Status " +
"WHERE ProductID=@ProductID";
cmd.Parameters.AddWithValue("@Quantity", alloted);
cmd.Parameters.AddWithValue("@ProductID", productid);
cmd.Parameters.AddWithValue("@Status", status);
cmd.ExecuteNonQuery();
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO Withdraw VALUES (@ProjectID, @ProductID, @SupplierID, @Quantity,@UserID, @DateWithdrawn)";
cmd.Parameters.AddWithValue("@ProjectID", ddlProjects.SelectedValue);
cmd.Parameters.AddWithValue("@ProductID", productid);
cmd.Parameters.AddWithValue("@SupplierID", DBNull.Value );
cmd.Parameters.AddWithValue("@Quantity", alloted);
cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString());
cmd.Parameters.AddWithValue("@DateWithdrawn", DateTime.Now);
cmd.ExecuteNonQuery();
con.Close();
GetMaterialsList();
}
else if (!isSafe)
{
quantityCheck.Text = Label2 + @" Inventory count will be lower than the critical level.";
Panel1.Visible = true;
}
else
{
Panel1.Visible = true;
quantityCheck.Text = Label2 + " Cannot input inventory";
}
}
}
<asp:LinkButton ID="lbtnUpdate" Text="Additional" class="btn btn-primary"
runat="server"></asp:LinkButton>
lbtnUpdate.PostBackUrl = String.Format("AdditionalAlloc.aspx?ID={0}&MID={1}",
ProjectID,ReqMatID);