0

「キー」または[0]の列を非表示にしようとしています。また、エンドユーザーがクリック/クリック解除できるチェックボックスを以下のコードに設定しようとしています。デフォルトでは、チェックボックスをオフの状態に設定しました。

このコードdgvPunchs.Columns[0].Hidden = true;は、列を非表示にする方法を見つけた方法ですが、次のエラーでエラーになります。

"オブジェクト参照がオブジェクト インスタンスに設定されていません。"

また、現在チェックボックスが表示されていますが、エンドユーザーはそれらをクリックできません。私は困惑しています。助けてください!:)

protected void GenerateSalaryPunchesTable()
        {
            this.dgvPunchs.Rows.Clear();

            string[] DateRange = this.cboPayPeriods.SelectedItem.Text.ToString().Replace(" ", "").Split('-');

            DataTable pDates = new DataTable();

            pDates.Columns.Add("Key");
            pDates.Columns.Add("Date", System.Type.GetType("System.DateTime")); // Date Cell
            pDates.Columns.Add("Worked", System.Type.GetType("System.Boolean")); //Worked CB
            pDates.Columns.Add("Vaction", System.Type.GetType("System.Boolean")); //Vacation CB
            pDates.Columns.Add("Sick", System.Type.GetType("System.Boolean")); //Sick CB
            pDates.Columns.Add("Holiday", System.Type.GetType("System.Boolean")); //Holiday CB
            pDates.Columns.Add("Error", System.Type.GetType("System.String")); //Error

            foreach (DataColumn col in pDates.Columns)
            {
                col.ReadOnly = false;
            }

            pDates.Columns["Key"].ColumnMapping = MappingType.Hidden;

            while (Convert.ToDateTime(DateRange[0]) <= Convert.ToDateTime(DateRange[1]))
            {
                if (Convert.ToDateTime(DateRange[0]).DayOfWeek != DayOfWeek.Saturday & Convert.ToDateTime(DateRange[0]).DayOfWeek != DayOfWeek.Sunday)
                {

                    DataRow nRow = pDates.NewRow();
                    nRow["Key"] = Convert.ToDateTime(DateRange[0].ToString()).ToShortDateString();
                    nRow["Date"]= Convert.ToDateTime(DateRange[0].ToString()).ToShortDateString();
                    nRow["Worked"] = 0;
                    nRow["Vaction"] = 0;
                    nRow["Sick"] = 0;
                    nRow["Holiday"] = 0;
                    nRow["Error"] = "";

                    pDates.Rows.Add(nRow);

                }

                DateRange[0] = Convert.ToDateTime(DateRange[0]).AddDays(1).ToShortDateString();
            }


            dgvPunchs.DataSource = pDates;
            dgvPunchs.DataBind();
            dgvPunchs.Columns[0].Hidden = true;
        }
4

2 に答える 2

1

WebDataGridで列を手動で作成する必要があります。作成しない場合は、columns.countを確認するだけで、= 0になり
ます。したがって、WebDataGridのinitイベントで(WebDataGrid1.datasourceを設定する前に)これを行うことができます。 WebDataGrid1.autogenertecolumns = false):

Infragistics.Web.UI.GridControls.BoundDataField f;    
Infragistics.Web.UI.GridControls.EditingColumnSetting columnSettingReadOnly;

foreach (System.Data.DataColumn c in pDates.Columns)
            {
                    f = new Infragistics.Web.UI.GridControls.BoundDataField(true);
                    f.DataFieldName = c.ColumnName;
                    f.Key = c.ColumnName;
                    f.Header.Text = c.ColumnName;
                    WebDataGrid1.Columns.Add(f);
// In order to set it as readonly:
columnSettingReadOnly = New Infragistics.Web.UI.GridControls.EditingColumnSetting();
                columnSettingReadOnly.ColumnKey = f.Key;
                columnSettingReadOnly.ReadOnly = True;
                WebDataGrid1.Behaviors.EditingCore.Behaviors.CellEditing.ColumnSettings.Add(columnSettingReadOnly);
            }

上記を試して、私たちに知らせてください。

PS:チェックボックスが表示されている列でチェックできない問題についてはよくわかりません...

于 2012-08-17T11:00:22.393 に答える
0

すべての列のマークアップをhtml側に追加する必要がありました。AutoGenerateColumnsをオフにし、EnableAjaxViewStateとEnableDataViewStateをオンにしましたが、それらが必要かどうかはわかりません。しかし、それをHTMLに追加することで、コードを呼び出すことができました。

ig:WebDataGrid ID = "dgvPunchs" runat = "server" Width = "800px" DataKeyFields = "Key" AutoGenerateColumns = "False" EnableAjaxViewState = "True" EnableDataViewState = "True">

<Columns>
    <ig:BoundDataField DataFieldName="Key" Key="Key">
        <Header Text="Key" />
    </ig:BoundDataField>
    <ig:BoundDataField DataFieldName="Date" Key="Date">
        <Header Text="Date" />
    </ig:BoundDataField>
    <ig:BoundCheckBoxField DataFieldName="Worked" 
        Key="Worked">
        <Header Text="Worked" />
    </ig:BoundCheckBoxField>
    <ig:BoundCheckBoxField DataFieldName="Vaction" 
        Key="Vaction">
        <Header Text="Vaction" />
    </ig:BoundCheckBoxField>
    <ig:BoundCheckBoxField DataFieldName="Sick" 
        Key="Sick">
        <Header Text="Sick" />
    </ig:BoundCheckBoxField>
    <ig:BoundCheckBoxField DataFieldName="Holiday" 
        Key="Holiday">
        <Header Text="Holiday" />
    </ig:BoundCheckBoxField>
    <ig:BoundDataField DataFieldName="Error" Key="Error">
        <Header Text="Error" />
    </ig:BoundDataField>
</Columns>

<Behaviors>
    <ig:EditingCore>
        <Behaviors>
            <ig:CellEditing>
            </ig:CellEditing>
        </Behaviors>
    </ig:EditingCore>
</Behaviors>

dgvPunchs.DataSource = pDates;
dgvPunchs.DataBind();
dgvPunchs.Columns[0].Hidden = true;
于 2012-08-20T21:18:00.193 に答える