从 table 中检索数据并提供给网格

Retrieve data from table and give to grid

我正在尝试创建一个包含某张票的所有信息的网格,它具有很多状态(table 中的行),我需要放入一个网格,这是我正在使用的方法:

调用填充网格的方法:

 private void AssemblyGrid()
        {
            //Set Grid
            gridTStatus.DataSource = null;
            gridTStatus.DataBind();

            User loggedUser = (User)HttpContext.Current.Session[SESSIONNAME.LOGGEDUSER];
            // Checa se o usuario tem permissão para utilizar essa funcionalidade
            if ((loggedUser.Login.ToUpper() != ConfigurationManager.AppSettings[APPSETTINGS.SUPPORTUSERS].ToUpper()))
            {
                Response.Redirect("AccessDenied.aspx");

            }
            Clic objClic = GetClic();
            Status returnStatus = new Status();
            List<StatusClicComplete> lstClic = new List<StatusClicComplete>();
            lstClic = ClicManager.SelectStatusClic(objClic,out returnStatus);




            //Set Grid
            gridTStatus.DataSource = lstClic;
            gridTStatus.DataBind();
        }

从数据库中检索信息的方法:

public List<StatusClicComplete> SelectStatusClicDB(Clic objClic , out Status returnStatus)
        {


            const string strStoredProcedure = "spSearchClicStatus";

            List<StatusClicComplete> complete = new List<StatusClicComplete>();

            try
            {


                Database database = DatabaseFactory.CreateDatabase(DATABASESETTINGS.CLICDB);
                using (DbCommand dbCommand = database.GetStoredProcCommand(strStoredProcedure))
                {
                    database.AddInParameter(dbCommand, "@iClic", DbType.Int32, objClic.ID);

                    using (IDataReader dataReader = database.ExecuteReader(dbCommand))
                    {
                        while (dataReader.Read())
                        {
                            complete.Add(new StatusClicComplete()
                                             {
                                                 iClic = dataReader.GetInt32(Convert.ToInt32("iClic")),
                                                 iStatus = dataReader.GetInt32(Convert.ToInt32("iStatus")),
                                                 dtDateCreated = dataReader.GetDateTime(Convert.ToInt32("dtDateCreated")),
                                                 iEDV = dataReader.GetInt32(Convert.ToInt32("iEDV")),
                                                 sComments = dataReader.GetString(Convert.ToInt32("sComments"))

                                             }
                                );

                        }
                        dataReader.Close();
                        returnStatus = StatusBuilder.BuildStatus("Success", string.Format("{0} - {1}", MethodBase.GetCurrentMethod().Name), true);

                    }
                }
            }
            catch(Exception exception)
            {

                returnStatus = StatusBuilder.BuildStatus("Error", string.Format("{0} - {1}", MethodBase.GetCurrentMethod().Name, exception.Message), false);

            }
            //TODO NAV8CA   - Escrever tratativa de objeto nulo
            return complete;




        }

StatusClicClass,即列表类型

namespace RB.LA.TER.CLIC.TRANSPORT
{
    [Serializable]
    public class StatusClicComplete
    {
        public int iClic { get; set; }
        public int iStatus { get; set; }
        public DateTime dtDateCreated { get; set; }
        public int iEDV { get; set; }
        public string sComments { get; set; }
    }
}

程序:

PROCEDURE [dbo].[spSearchClicStatus]


@iClic int = NULL

AS

SELECT
        dtDateCreated, iEDV, sComments, sDescription, SC.iStatus
    FROM
        T_STATUS_CLIC SC INNER JOIN T_STATUS S
            ON SC.iSTATUS = S.iSTATUS
    WHERE
        SC.iClic = @iClic
    ORDER BY 
        dtDateCreated



GO

我正在尝试 运行 此代码,但出现错误(输入字符串的格式不正确。)当它输入完整的 while 时,有人知道我在做什么错了?

dataReader.GetInt32(Convert.ToInt32("iStatus"))是错误的。应该是

dataReader.GetInt32(4)

dataReader.GetInt32(dataReader.GetOrdinal("iStatus"));

第一种情况直接指定了ordinal。在第二种情况下,我们使用列名计算序数。此外,理想情况下,您必须在使用此方法之前检查 IsDBNull,否则您将得到 InvalidCastException。所以更优化的方法是,

iClic = objClic.ID, // we already have that
iStatus = dataReader.IsDBNull(dataReader.GetOrdinal("iStatus")) ? dataReader.GetInt32(dataReader.GetOrdinal("iStatus")) : 0

P.S:序号位置是SELECT子句中列的位置。它是一个基于零的索引。在您的 select 查询中,iClic 有 5th 个位置,因此序数位置为 4.