DataBinding:“System.Data.DataRowView”不包含名为“vcompanyname”的属性。
百度的大多数答案的意思是查询生成的ds中没有vcompanyname字段,但我的查询语句确实是有的,有还人说的session的问题,但没具体解释原因或者解决方案。
问题具体如下:
表1 公司表,从公司表的联系人,链接到联系人对应的表2 联系人信息表。vcompanyname均不是2表主键。
<asp:HyperLinkField HeaderText="联系人" DataNavigateUrlFields="vcompanyname" DataNavigateUrlFormatString="~/companycontrast/List.aspx?id={0}"
Text="联系人" />
表2的gridview是动软生成的,这部分代码在生成表1时用过,是可用的,但在表2时出问题了。
Maticsoft.BLL.companycontrast bll = new Maticsoft.BLL.companycontrast();
public string strid = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
gridView.BorderColor = ColorTranslator.FromHtml(Application[Session["Style"].ToString() + "xtable_bordercolorlight"].ToString());
gridView.HeaderStyle.BackColor = ColorTranslator.FromHtml(Application[Session["Style"].ToString() + "xtable_titlebgcolor"].ToString());
btnDelete.Attributes.Add("onclick", "return confirm(\"你确认要删除吗?\")");
if (Request.Params["id"] != null && Request.Params["id"].Trim() != "")
{
strid = Request.Params["id"];
}
BindData(strid.Trim());
}
}
protected void btnSearch_Click(object sender, EventArgs e)
{
BindData(strid.Trim());
}
protected void btnDelete_Click(object sender, EventArgs e)
{
string idlist = GetSelIDlist();
if (idlist.Trim().Length == 0)
return;
bll.DeleteList(idlist);
BindData(strid.Trim());
}
#region gridView
public void BindData(string vcompanyname)
{
#region
//if (!Context.User.Identity.IsAuthenticated)
//{
// return;
//}
//AccountsPrincipal user = new AccountsPrincipal(Context.User.Identity.Name);
//if (user.HasPermissionID(PermId_Modify))
//{
// gridView.Columns[6].Visible = true;
//}
//if (user.HasPermissionID(PermId_Delete))
//{
// gridView.Columns[7].Visible = true;
//}
#endregion
DataSet ds = new DataSet();
/* StringBuilder strWhere = new StringBuilder();
if (txtKeyword.Text.Trim() != "")
{
#warning 代码生成警告:请修改 keywordField 为需要匹配查询的真实字段名称
strWhere.AppendFormat("keywordField like '%{0}%'", txtKeyword.Text.Trim());
} */
string strWhere = "vcompanyname = '" + vcompanyname + "'";
ds = bll.GetList(strWhere.ToString());
gridView.DataSource = ds;
gridView.DataBind();
}
protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridView.PageIndex = e.NewPageIndex;
BindData(strid.Trim());
}
protected void gridView_OnRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//e.Row.Cells[0].Text = "<input id='Checkbox2' type='checkbox' onclick='CheckAll()'/><label></label>";
}
}
protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Attributes.Add("style", "background:#FFF");
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton linkbtnDel = (LinkButton)e.Row.FindControl("LinkButton1");
linkbtnDel.Attributes.Add("onclick", "return confirm(\"你确认要删除吗\")");
//object obj1 = DataBinder.Eval(e.Row.DataItem, "Levels");
//if ((obj1 != null) && ((obj1.ToString() != "")))
//{
// e.Row.Cells[1].Text = obj1.ToString();
//}
}
}
protected void gridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//#warning 代码生成警告:请检查确认真实主键的名称和类型是否正确
//int ID = (int)gridView.DataKeys[e.RowIndex].Value;
//bll.Delete(ID);
//gridView.OnBind();
}
private string GetSelIDlist()
{
string idlist = "";
bool BxsChkd = false;
for (int i = 0; i < gridView.Rows.Count; i++)
{
CheckBox ChkBxItem = (CheckBox)gridView.Rows[i].FindControl("DeleteThis");
if (ChkBxItem != null && ChkBxItem.Checked)
{
BxsChkd = true;
//#warning 代码生成警告:请检查确认Cells的列索引是否正确
if (gridView.DataKeys[i].Value != null)
{
idlist += gridView.DataKeys[i].Value.ToString() + ",";
}
}
}
if (BxsChkd)
{
idlist = idlist.Substring(0, idlist.LastIndexOf(","));
}
return idlist;
}
#endregion
}
代码运行到 gridView.DataBind();时报错。
单步跟踪到这里时:
connection.Open();
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
无法查看返回数据集ds中数据,但所涉及所有字段数据库中均存在,测试查询内容在数据库中也存在。