使用C#和winforms从列表中填充文本框
以下内容用于填充使用C#和winforms从列表中填充文本框,c#,winforms,C#,Winforms,以下内容用于填充DataGridView,但我确实使用它来填充TextBoxes? 我的注释行抛出索引外错误 void PopulateProjectDetails() { 使用(IDbConnection connection=new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnVal(“db”)) { var param=新的动态参数(); 参数Add(“@SearchText”,Convert.ToInt32(selIDProje
DataGridView
,但我确实使用它来填充TextBox
es?我的注释行抛出索引外错误
void PopulateProjectDetails()
{
使用(IDbConnection connection=new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnVal(“db”))
{
var param=新的动态参数();
参数Add(“@SearchText”,Convert.ToInt32(selIDProject));
List projectlist=connection.Query(“dbo.spProjectsViewSearchByID”,参数,commandType:commandType.StoredProcedure).ToList();
txtProjectID.Text=seldproject.ToString();
dataGridView1.DataSource=项目列表;
//txtProjectName.Text=projectlist[3].ToString();
}
}
运行存储过程后,projectlist
仅包含一个Projects
对象。当您调用projectlist[3]
时,您告诉该列表使用该列表中的4th元素。这就是为什么会出现索引异常。3
这里是所需元素的从零开始的索引。它与数据库中的列或Projects
对象的字段/属性没有任何关系
如果要访问列表中的第一个(也是唯一一个)项,只需执行projectlist[0]
(但如果存储过程甚至没有返回一个项,则仍然可能会出现错误)。如果要验证这一点,一种方法是检查projectlist.Count
。看
然而,这很可能还不足以满足你的需求。如果您要调用projectlist[3].ToString()
,并且您还没有重写该方法(您可能没有重写,这很好;在这种特定情况下,它不会非常有用),您将看到类似“YourNamespace.Projects”的内容。它只是该类的默认字符串表示形式
好消息是,如果代码直接填充Projects
对象,那么所需的值已经在类的属性中。您应该能够执行以下操作:
void PopulateProjectDetails()
{
using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnVal("db")))
{
var param = new DynamicParameters();
param.Add("@SearchText", Convert.ToInt32(selIDProject));
List<Projects> projectlist = connection.Query<Projects>("dbo.spProjectsViewSearchByID", param, commandType: CommandType.StoredProcedure).ToList<Projects>();
txtProjectID.Text = selIDProject.ToString();
dataGridView1.DataSource = projectlist;
//Consider checking projectlist.Count before accessing projectlist[0]
txtProjectName.Text = projectlist[0].ProjectName;
}
}
void PopulateProjectDetails()
{
使用(IDbConnection connection=new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnVal(“db”))
{
var param=新的动态参数();
参数Add(“@SearchText”,Convert.ToInt32(selIDProject));
List projectlist=connection.Query(“dbo.spProjectsViewSearchByID”,参数,commandType:commandType.StoredProcedure).ToList();
txtProjectID.Text=seldproject.ToString();
dataGridView1.DataSource=项目列表;
//考虑检查projectlist。在访问projectlist[0]之前先计数
txtProjectName.Text=projectlist[0]。ProjectName;
}
}
您是否在调试器中检查了项目列表的内容?有了这个错误,它可能不包含您期望的内容。这里只有一个新手,但是yes projectlist显示了一条记录,并显示了字段和数据。它可以填充数据网格视图。有两个字段为“null”,这可能是错误吗?如果projectlist
只包含一条记录,那么projectlist[3]
上显然会出现错误,因为这是在查找第四个元素……哦。。。我想这是指返回记录的第4列。不是第三条不存在的记录。那么,如何从返回的记录中检索所有列数据并将其放入表单上现有的文本框中呢?这取决于。什么是项目
类?它是否具有与这些列对应的属性?或者,您可以执行类似于projectlist.First()、projectlist.FirstOrDefault()或其他LINQ方法的操作。但这可能比这里需要的多一点。太棒了。成功了。我还将加入计数行。